Javascript 文件上载填充req.body,但不填充req.File
我使用multer和express创建了一个文件上载API,通过POSTMAN可以正常工作,但当我尝试使用另一个文件上载API调用同一API时,它不起作用: 我的代码如下,运行于: 在上面的代码中,当我通过postman调用API时,我的req.file被填充 但是使用下面的代码调用上面的API不会填充第一个API的req.file,它是未定义的。我也尝试过在没有任何运气的情况下使用表单数据npm模块: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)
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))
})