express-fileupload的文件上传和移动问题

时间:2019-08-19 07:17:21

标签: node.js express

我具有此文件/文件夹结构:

+--public
|    +--/productsImg/   //folder where i want to move images
+--routes
|    +--products.js    //the part that tells the images to move to /public/productImg/

为了移动特定的图像,我使用了 EXPRESS-FILEUPLOAD模块

我希望所有图像都在/ public / productsImg /文件夹中。请参阅上面的文件夹/文件结构。

products.js 中,我编写了以下代码:

var image = req.files; // in VIEW <input type="file" name="image"/>

var uploadPath = path.resolve(__dirname, '../public/productsImg/' + image.name);

//console.log(uploadPath) gives nothing ;

image.mv(uploadPath, (err) => {

  if (err) {
    return res.status(500).send(err);
  }

  res.send('File uploaded to ' + uploadPath);

});

我在nodemon控制台中遇到此错误:POST /products/store 500 9.733 ms - 16104

我认为我可能没有正确使用path.resolve部分,并且我的uploadPath变量(文件)是未知的。

看过其他帖子,我不知道。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

也许可以帮助某人:解决方案

1),即使我在app.js中添加了var path = required('path');,也已在product.js中添加了此内容。这很重要,否则它将无法正常工作。

2)创建了/ tmp /文件夹(项目的根目录),并将其添加到应用程序中

app.use(fileUpload({
  useTempFiles : true,
  tempFileDir : '/tmp/'
}));

3)将代码更改为

var { image } = req.files;

var uploadPath = path.resolve(__dirname, '../public/productsImg/', image.name); // important

console.log(uploadPath);

image.mv(uploadPath, (err) => {

  if (err) {
    return res.status(500).send(err);
  }

  res.send('File uploaded to ' + uploadPath);
  //or whatever you want to do

});

答案 1 :(得分:0)

根据您的示例,您的文件对象应位于req.files.image中。 请参阅express-fileupload文档:

示例:

  • 您正在上传一个名为car.jpg的文件
  • 您输入的名称字段为foo:
  • 在您的快递服务器请求中,您可以从req.files.foo访问上载的文件:
app.post('/upload', function(req, res) {
  console.log(req.files.foo); // the uploaded file object
});

答案 2 :(得分:-1)

hie,在express-fileupload中,您可以通过name属性访问图片,因此您可以考虑更改

var image = req.files

var image = req.files.image

希望有帮助