file - unify '/:id' & '/:id/:name'
This commit is contained in:
parent
f80283a94f
commit
8e62cc1efd
1 changed files with 33 additions and 61 deletions
|
@ -86,70 +86,42 @@ function send(data: Buffer, type: string, req: express.Request, res: express.Res
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function sendFileById (req: express.Request, res: express.Response): Promise<void> {
|
||||||
|
// Validate id
|
||||||
|
if (!mongodb.ObjectID.isValid(req.params.id)) {
|
||||||
|
res.status(400).send('incorrect id');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileId = new mongodb.ObjectID(req.params.id);
|
||||||
|
const file = await DriveFile.findOne({ _id: fileId });
|
||||||
|
|
||||||
|
if (file == null) {
|
||||||
|
res.status(404).sendFile(`${__dirname}/assets/dummy.png`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const bucket = await getGridFSBucket();
|
||||||
|
|
||||||
|
const buffer = await ((id): Promise<Buffer> => new Promise((resolve, reject) => {
|
||||||
|
const chunks = [];
|
||||||
|
const readableStream = bucket.openDownloadStream(id);
|
||||||
|
readableStream.on('data', chunk => {
|
||||||
|
chunks.push(chunk);
|
||||||
|
});
|
||||||
|
readableStream.on('end', () => {
|
||||||
|
resolve(Buffer.concat(chunks));
|
||||||
|
});
|
||||||
|
}))(fileId);
|
||||||
|
|
||||||
|
send(buffer, file.metadata.type, req, res);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Routing
|
* Routing
|
||||||
*/
|
*/
|
||||||
|
|
||||||
app.get('/:id', async (req, res) => {
|
app.get('/:id', sendFileById);
|
||||||
// Validate id
|
app.get('/:id/:name', sendFileById);
|
||||||
if (!mongodb.ObjectID.isValid(req.params.id)) {
|
|
||||||
res.status(400).send('incorrect id');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fileId = new mongodb.ObjectID(req.params.id);
|
|
||||||
const file = await DriveFile.findOne({ _id: fileId });
|
|
||||||
|
|
||||||
if (file == null) {
|
|
||||||
res.status(404).sendFile(`${__dirname}/assets/dummy.png`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const bucket = await getGridFSBucket();
|
|
||||||
|
|
||||||
const buffer = await ((id): Promise<Buffer> => new Promise((resolve, reject) => {
|
|
||||||
const chunks = [];
|
|
||||||
const readableStream = bucket.openDownloadStream(id);
|
|
||||||
readableStream.on('data', chunk => {
|
|
||||||
chunks.push(chunk);
|
|
||||||
});
|
|
||||||
readableStream.on('end', () => {
|
|
||||||
resolve(Buffer.concat(chunks));
|
|
||||||
});
|
|
||||||
}))(fileId);
|
|
||||||
|
|
||||||
send(buffer, file.metadata.type, req, res);
|
|
||||||
});
|
|
||||||
|
|
||||||
app.get('/:id/:name', async (req, res) => {
|
|
||||||
// Validate id
|
|
||||||
if (!mongodb.ObjectID.isValid(req.params.id)) {
|
|
||||||
res.status(400).send('incorrect id');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fileId = new mongodb.ObjectID(req.params.id);
|
|
||||||
const file = await DriveFile.findOne({ _id: fileId });
|
|
||||||
|
|
||||||
if (file == null) {
|
|
||||||
res.status(404).sendFile(`${__dirname}/assets/dummy.png`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const bucket = await getGridFSBucket();
|
|
||||||
|
|
||||||
const buffer = await ((id): Promise<Buffer> => new Promise((resolve, reject) => {
|
|
||||||
const chunks = [];
|
|
||||||
const readableStream = bucket.openDownloadStream(id);
|
|
||||||
readableStream.on('data', chunk => {
|
|
||||||
chunks.push(chunk);
|
|
||||||
});
|
|
||||||
readableStream.on('end', () => {
|
|
||||||
resolve(Buffer.concat(chunks));
|
|
||||||
});
|
|
||||||
}))(fileId);
|
|
||||||
|
|
||||||
send(buffer, file.metadata.type, req, res);
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = app;
|
module.exports = app;
|
||||||
|
|
Loading…
Reference in a new issue