文件上传填充 req.body 但不填充 req.file

File upload populating req.body but not req.file

我已经使用 multer 和 express 创建了一个文件上传 API,它可以通过 POSTMAN 正常工作,但是当我尝试使用另一个文件上传 API 调用相同的 api 时,它不是工作:

我的代码如下,在 http://localhost:7022/nuxeo/upload 上运行:

module.exports.upload = function (req, res, next) {
    var path = req.body.path
    var uploadFile = req.file; //get uploaded file
    var stream = streamifier.createReadStream(req.file.buffer) //create a stream from file buffer
    var blob = new Nuxeo.Blob({   //create a blob from file stream
        content: stream,
        name: uploadFile.originalname,
        mimeType: uploadFile.mimetype,
        size: uploadFile.size
    });
    var batch = nuxeo.batchUpload();

在上面的代码中,当我通过邮递员调用 API 时,我的 req.file 被填充了。

但是使用下面的代码调用上面的 API 不会填充第一个 API 的 req.file,它是未定义的。我也尝试过使用 form-data npm 模块但没有任何运气:

module.exports.attach = function(req,res,next){
    var uploadfile = req.file  //file is populated here
    formData = { 'file' : uploadfile, 'path' : '/FCA/DT/clause32a'}
    var opts = {
        url: "http://localhost:7022/nuxeo/upload",
        headers: { 'enctype':  'multipart/form-data;boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' },
        json: true,
        body: formData
    };
    request.post(opts,function(err,response,body){
        console.log(body)
    })
}
module.exports.attach = function(req,res,next){
    var uploadfile = req.file  //file is populated here
    var fs = require('fs');
var request = require('request');
request.post({
    url: <URL>,
    formData: {
        file: fs.createReadStream(<FILE_PATH>),
        filetype: <FILE_TYPE>,
        filename: <FILE_NAME>,
        title: <FILE_TITLE>,
    },
}, function(error, response, body) {
    console.log(body);
});

}

我在这个 post 的帮助下解决了它:

var stream = require('stream')

const { Duplex } = stream;
function bufferToStream(buffer) {
   const duplexStream = new Duplex();
   duplexStream.push(buffer);
   duplexStream.push(null);
   return duplexStream;
}

request.post({
       headers: { 'enctype': 'multipart/form-data;boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' },
       url: "http://localhost:7022/nuxeo/upload",
            formData: {
                file: {
                    value: bufferToStream(req.file.buffer),
                    options: {
                        filename: req.file.originalname,
                        contentType: req.file.mimetype,
                        knownLength: req.file.size
                    }
                },
                path: '/FCA/DT/clause32a'
            }
        }, function (error, response, body) {
            if (error) { return next(error) 
            res.send(JSON.parse(body))
        })