一个超级简单的Multer问题,嵌套文件上传

问题描述 投票:0回答:2

我正在尝试使用 Multer 和 Express 进行图像上传。仅上传图像进展顺利,一切正常,问题是,我想发送的不仅仅是一张照片。让我解释。我得到了最基本的表格,不值得分享。然后,当提交带有 JUST 图像的表单时,axios 请求如下所示:

async onSubmit() {
    const formData = new FormData();
    formData.append('file', this.person.personData.file)
    this.obj.file = formData

    try {
        await axios.post('/projects/new', this.obj.file);
        this.message = 'Uploaded';
    } catch (err) {
        console.log(err);
        this.message = 'Something went wrong'
    }
},

Express 中接收图像的邮寄路线如下所示:

personRoutes.post('/new', upload.single('file'), (req, res) => {
    console.log('BODY: ', req.body)
    console.log('REQ.FILE: ', req.file)

    const person = new Person({
        personData: {
            file: req.file.path
        }
    });
    person.save()
        .then(result => {
            console.log('YES', result)
            res.redirect('/projects')
        })
        .catch(err => {
            console.log('KUT', err)
        })
});

req.file 是

upload.single('file')
文件。 Req.body 将保存文本字段(如果有)。 Ez Pz,到目前为止一切顺利。现在,事情变得有点粗略了,如果我想上传不止一张照片怎么办?所以我的
obj
对象不仅拥有
file
属性,还拥有其他一些属性。目前我直接发送 formData 文件

await axios.post('/projects/new', this.obj.file);

但是如果我的

obj
包含的不仅仅是一个文件,我将不得不这样做:

await axios.post('/projects/new', this.obj);

但是我的特快专递路线到底应该是什么样子呢?因为

req.file
现在(据我所知)将永远是
undefined
,因为
file
没有在
req
对象内定义。它在
req.body
对象中定义。以
req.obj.file
身份访问文件不会执行任何操作。任何帮助将非常感激。我什至不知道这是否可能。如果没有,我还有什么其他选择?

提前致谢!

node.js express axios multer
2个回答
0
投票

upload.array('file')
应该可以。将收到任意数量的文件。

这是一个例子: 乘法器代码:

const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, 'uploads')
    },
    filename: (req, file, cb) => {
        cb(null, "image"+Date.now()+file.originalname);
    }
});
const fileFilter = (req,file,cb)=>{
  if(file.mimetype==="image/jpeg" || file.mimetype==="image/png"){
      cb(null, true);
  }else{
    cb(new Error("File type is not acceptable"),false);
  }
}

const uploadImages = multer({storage:storage,
  limits:{
      fileSize: 1024*1024*10
    },
    fileFilter:fileFilter}).array("shopImage");

app.邮政编码:

app.post("/shop", function(req,res){
  uploadImages(req,res,function(err){
    if(err){
      console.log(err);
      res.status(400).json({message:err.message});
    }else{
      console.log(req.files);
      console.log(req.body);
....
    }
  });
....
})

0
投票
app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
  // req.files is array of `photos` files
  // req.body will contain the text fields, if there were any
})

添加需要上传的照片数量。 upload.array('照片', 12) 12代表您需要上传多少张图片。

© www.soinside.com 2019 - 2024. All rights reserved.