我正在创建一个节点服务器,文件可以上传到该节点服务器,然后发送到也使用节点的存储服务器。 为此,我使用Form-Data模块页面上描述的方法:
var formData = {
my_field: 'my_value',
my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),
};
request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
});
我的问题是,当我尝试在存储服务器上写入文件时,它会创建一个包含内容[object Object]的文本文件。
这是我的代码:
main.js
var form = new formData();
form = {
'oldFileName': oldName,
'newFileName': newName,
'file': fs.createReadStream(FILEPATH),
};
request.post({url:'http://127.0.0.1:9001/upload', form: form}, function(err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
});
storage.js
app.post('/upload', function(req,res){
//Filenames are displayed without problem
console.log(req.body.newFileName);
console.log(req.body.oldFileName);
fs.writeFile('./testing/' + req.body.newFileName, req.body.file, function(err) {
if(err) {
return console.log(err);
}
})
我确信我错过了一些非常明显的东西,但我似乎无法让它发挥作用。
答案 0 :(得分:0)
您正在formData
form
选项request
中将application/x-www-form-urlencoded
内容更改为multipart/form-data
而不是var form = {
'oldFileName': oldName,
'newFileName': newName,
'file': fs.createReadStream(FILEPATH),
};
request.post({url:'http://127.0.0.1:9001/upload', formData: form}, function(err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
});
。
<强> app.js 强>
multipart/form-data
另外,要解析multer
,您必须使用body-parser
或类似的库,storage.js
在这种情况下不起作用。请查找以下用于保存文件的 var multer = require('multer')
var upload = multer({
storage: multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './testing/');
},
filename: function (req, file, cb) {
cb(null, req.body.newFileName);
}
})
}).single('file');
app.post('/upload', function(req, res, next){
upload(req, res, function (err) {
if(err){
return res.send(err);
} else{
return res.send("Upload successfully");
}
});
});
代码。
storage.js
max_threads
希望它对你有所帮助。
答案 1 :(得分:0)
或者,将[object Object]包装在JSON.stringify()方法中,应该可以显示对象的文字字符串内容。
在我的情况下,我使用OJS2.0协议使用NodeJS库上传YouTube视频。
在此标准内,您发布您的客户端ID和客户端密钥以验证您对YouTube数据API的使用。
作为回报,服务器以访问令牌和刷新令牌的形式返回令牌。这些令牌需要刷新使用API的能力,而不会过期。
但是,当我请求“令牌”时,我正在终端中接收(对象,对象)。...
Logger.log(Got the tokens:(token)
);
为纠正此问题并以可读的字符串格式在终端中显示令牌,我执行了以下操作...
Logger.log(Got the tokens: ${JSON.stringify(token)}
);
现在我可以相应地使用令牌了。
//注意-ES6反引号用作字符串文字,但反引号似乎未显示在参数中。