Загрузка файла заполнена req.body, но не req.file - PullRequest
0 голосов
/ 05 сентября 2018

Я создал API для загрузки файлов, используя multer и express, который прекрасно работает через 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 с использованием приведенного ниже кода не заполняет файл req.file первого API, он не определен. Я также безуспешно пытался использовать модуль 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)
    })
}

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Я решил это с помощью этого поста: как загрузить файл, сохраненный в памяти с помощью multer, в другой API

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))
        })
0 голосов
/ 05 сентября 2018
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);
});

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...