multer "req.file" 未定义来自脚本的 http 请求,但使用 html 表单标签
multer "req.file" is undefined for http request from script but working with html form tag
我在 Node.js 上使用 multer 构建了一个简单的文件上传器。当我上传带有 html 表单标签的文件时,它工作正常:
<form id="uploadForm" enctype="multipart/form-data" method="post">
<input type="file" name="userFile" />
<input type="submit" value="Upload File" name="submit">
</form>
但是如果我尝试使用 Angular JS $http 请求从 javaScript 执行相同的操作,它会抛出一条错误消息 "req.file is undefined"。使用邮递员上传时会抛出相同的错误。
我的 angular $http 请求:
var formData = new FormData();
formData.append('file', file);
$http.post('http://localhost:8080/api/file', formData, {
headers: {'Content-Type': 'multipart/form-data'}
})
.then(function(res){
console.log(res);
})
.catch(function(err){
console.log(err);
});
我的上传 api :
app.post('/api/file', function(req, res) {
var upload = multer({
storage: multer.memoryStorage()
}).single('userFile')
upload(req, res, function(err) {
console.log(req);
if(req.file) {
var buffer = req.file.buffer;
var filename = req.file.originalname;
fs.writeFile('./uploads/' + filename, buffer, 'binary', function(err) {
if (err) throw err
res.end('File is uploaded')
})
} else {
res.end('Invalid request : file not found')
}
});
})
有很多类似的问题,但 none 帮助我解决了这个问题。
任何人都可以让我知道这里的问题吗?谢谢。
将userFile
更改为file
var upload = multer({
storage: multer.memoryStorage()
}).single('file')
我在 Node.js 上使用 multer 构建了一个简单的文件上传器。当我上传带有 html 表单标签的文件时,它工作正常:
<form id="uploadForm" enctype="multipart/form-data" method="post">
<input type="file" name="userFile" />
<input type="submit" value="Upload File" name="submit">
</form>
但是如果我尝试使用 Angular JS $http 请求从 javaScript 执行相同的操作,它会抛出一条错误消息 "req.file is undefined"。使用邮递员上传时会抛出相同的错误。
我的 angular $http 请求:
var formData = new FormData();
formData.append('file', file);
$http.post('http://localhost:8080/api/file', formData, {
headers: {'Content-Type': 'multipart/form-data'}
})
.then(function(res){
console.log(res);
})
.catch(function(err){
console.log(err);
});
我的上传 api :
app.post('/api/file', function(req, res) {
var upload = multer({
storage: multer.memoryStorage()
}).single('userFile')
upload(req, res, function(err) {
console.log(req);
if(req.file) {
var buffer = req.file.buffer;
var filename = req.file.originalname;
fs.writeFile('./uploads/' + filename, buffer, 'binary', function(err) {
if (err) throw err
res.end('File is uploaded')
})
} else {
res.end('Invalid request : file not found')
}
});
})
有很多类似的问题,但 none 帮助我解决了这个问题。 任何人都可以让我知道这里的问题吗?谢谢。
将userFile
更改为file
var upload = multer({
storage: multer.memoryStorage()
}).single('file')