我如何使用express将带有formData的文件上传到节点js?

时间:2019-05-29 11:06:53

标签: javascript node.js express

我想将文件中的一些数据上传到服务器上,如果没错,我需要将文件和所有数据传递到formData中,然后在服务器端进行解析。

我还使用Multer解析正文并将文件保存在服务器上,但是我不知道如何从formData中获取文本数据,因为Multer会从我的数据中获取不带formData的只读文件表格。

我如何在Multer中获取所有数据,或者在没有Multer的情况下获取表格数据?

前端

let file = file[0];
//some file from input

let data = {
  name: 'Jhon',
  job: 'Engener',
  time: 12
}
let formData = new FormData();

formData.append('formData', JSON.stringy(data))

axios.post('someURL', formData);

后端

const multer = require('multer');
const fs = require('fs');

let storage = multer.diskStorage({
  destanation: (req, file, callback) => {
      callback(null, '/files')
  },
  
  filename: (req, file, callback) => {
    callback(null, 'newFile');
  }
});

let upload = multer({storage)};
 
 
api.post('/', upload.any(), (req, res) => {
  
});

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么代码应该在同一操作中处理上传并获取一些发布的数据。前一阵子,我编写了这段代码,效果很好,也许有帮助:

exports.myPostFunction = function (req, res) {
    var multer = require('multer');

    var path = require('path');
    var storage = multer.diskStorage({
        destination: function (req, file, cb) {
            cb(null, process.env.UPLOAD_FOLDER);
        },
        filename: function (req, file, cb) {
            cb(null, path.extname(file.originalname));
        }
    });

    // Treat posted file
    var upload = multer({ storage: storage }).fields([
        { name: 'myImage', maxCount: 1 }, 
    ]);

    upload(req, res, function(err) {
        if (err) {
            // ...
        } 

        // Get posted data:
        var obj = { 
            myField1: req.body.myField1,
            myField2: req.body.myField2
        };

        // ...
     });
};

在前端:

var formData = new FormData();
formData.append("myField1", data.myField1);
formData.append("myField2", data.myField2);
formData.append("myImage", data.image[0]); // myInputFile.files[0]

$.ajax({
    url: 'someURL',
    type: 'put',
    processData: false,
    data: formData,
    success: function(data) {}
});