Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 文件上载填充req.body,但不填充req.File_Javascript_Node.js_Express_Multer - Fatal编程技术网

Javascript 文件上载填充req.body,但不填充req.File

Javascript 文件上载填充req.body,但不填充req.File,javascript,node.js,express,multer,Javascript,Node.js,Express,Multer,我使用multer和express创建了一个文件上载API,通过POSTMAN可以正常工作,但当我尝试使用另一个文件上载API调用同一API时,它不起作用: 我的代码如下,运行于: 在上面的代码中,当我通过postman调用API时,我的req.file被填充 但是使用下面的代码调用上面的API不会填充第一个API的req.file,它是未定义的。我也尝试过在没有任何运气的情况下使用表单数据npm模块: module.exports.attach = function(req,res,next)

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

我的代码如下,运行于:

在上面的代码中,当我通过postman调用API时,我的req.file被填充

但是使用下面的代码调用上面的API不会填充第一个API的req.file,它是未定义的。我也尝试过在没有任何运气的情况下使用表单数据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=函数(req、res、next){
var uploadfile=req.file//文件在此处填充
var fs=需要('fs');
var请求=要求(“请求”);
请寄({
网址:,
表格数据:{
文件:fs.createReadStream(),
文件类型:,
文件名:,
标题:,
},
},函数(错误、响应、正文){
控制台日志(主体);
});
}

我在这篇文章的帮助下解决了这个问题:


如果它与邮递员一起工作,服务器端应该可以正常工作。你可以发布客户端代码或HTML吗?第二个API就像一个客户端,我在第二个API的req.file中收到上传的文件,它应该将这个req.file发送到第一个API。我正在尝试这样做:我可以把req.file放在formData的file属性中吗?我通过multer将文件保存在内存中,并且只能通过req.file访问。在执行fs.createReadStream(req.file)时,我得到一个TypeError:路径必须是字符串或缓冲区。另外,req.file有一个缓冲区属性,我能用它做些什么吗?是的,你必须指定文件的路径,请阅读此处了解更多详细信息。我正在尝试这样做:我想这正是你想要的
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);
});

}
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))
        })