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…
	
	Add table
		Add a link
		
	
		Reference in a new issue