nodejs multer将存储的图像检索到客户端

时间:2019-09-25 09:30:09

标签: node.js mongodb express mongoose

我已经在nodejs应用程序中创建了文件存储,以将图像存储在uploads文件夹中。效果很好,但是现在我想显示那些图像,我已经阅读了其他文章,但是我仍然不确定。

这是我的代码:

 var Storage = multer.diskStorage({
 destination: function(req, file, callback) {
 var pathname = file.originalname;
 var path = pathname[0].replace('_','/');
 cb(null,'./uploads'+pathname);
 },
 filename: function(req, file, callback) {
 var pathname = file.originalname;
 var filename = pathname[1];
 if(pathname!=undefined)
 callback(null, pathname);
 }
 });
 var upload = multer({ storage: Storage }).single('file');

router.post('/upload', multer({dest:'./uploads/'}).single('file'), function(req,res)
 {
 return res.status(201).json({result:req.file});
 });

我从控制台日志中获得

{ fieldname: 'file',
  originalname: '1569402978357.jpg',
  encoding: '7bit',
  mimetype: 'image/jpeg',
  destination: './uploads/',
  filename: 'ada9282345565e8a77c6adc4b2d15836',
  path: 'uploads\\ada9282345565e8a77c6adc4b2d15836',
  size: 170272 }

,并在上传中存储为文件名

我的问题是如何显示此图像?应该从存​​储的文件名中调用它还是应该更改存储以将其另存为带有文件扩展名的原始文件名?

2 个答案:

答案 0 :(得分:1)

保留原始文件名的选择因使用案例而异。无论哪种情况,您都必须将名称存储在持久性介质(例如数据库)中的某个位置,以便在将其显示回去时,您可以查看您的上载目录并将文件发送回去。

答案 1 :(得分:1)

根据您的用例,如果要使用其他名称存储文件,则需要在以后的阶段中找到文件的方法。可以通过将名称存储在数据库中来实现,或者甚至可以使用某种公式从原始文件中查找存储文件的文件名。例如:

name_of_stored_file =  md5(name_of_original_file)

由于文件(图像)现在存储在您的后端中,因此您可以公开一些API以根据请求将文件发送给客户端。同样,这完全取决于用例,但这是使用Expressjs res.sendFile方法的简单示例:

app.get('/file/:fileName', function (req, res) {
    const filePath = // find out the filePath based on given fileName
    res.sendFile(filepath);
});

http://expressjs.com/en/api.html#res.sendFile