【发布时间】:2018-01-12 22:41:40
【问题描述】:
我有一个用户表单,用户可以在其中选择系统上的文件并使用FormData 将其上传到另一台服务器。在测试将其直接发送到 api 时它工作正常。但是我需要在发送之前修改标题。所以我发布到客户端应用程序的后端。
router.post('/upload', function(req, res, next) {
//...some axios or request logic
var fs = require('fs');
var request = require('request');
var formData = {
my_field: 'my_value',
my_file: fs.createReadStream(__dirname + '/example.doc'),
};
request.post({url:'http://someothereapp/upload-file', formData: formData}, function(err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
res.send('good!');
});
});
axios 或 request 非常适合发布普通表单或获取请求。但是当我尝试使用它来发送文件时它不起作用。上面的代码总是返回成功但不上传文件。所以我去了here,但仍然不明白我错过了什么。
我在测试时在另一台服务器(本地)上关闭了身份验证和跟踪,因此我不必修改标头。如果我从网络表单直接将文件发送给它,它有以下代码可以正常工作,而不是从我的客户端快速应用程序发送:
// http://someothereapp/upload-file
router.post('/upload-file', (req, res, next) => {
let multer = require('multer')
let p = path.join(__dirname, '../uploads');
let storage = multer.diskStorage({
destination: function(req, file, callback) {
callback(null, p )
},
filename: function(req, file, callback) {
console.log('what is file', file)
callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
}
})
let upload = multer({
storage: storage
}).single('userFile')
upload(req, res, function(err) {
res.end('File is uploaded')
})
});
我看到this 问题,并认为这可能意味着它不可能使用 axios 但你如何处理请求?例如,在post ... upload 代码中,我如何让my_file 成为用户在其表单中选择的文件?为什么不上传文件也没有失败?
【问题讨论】:
标签: node.js