节点 js 多文件上传不起作用。 req.file 和 req.files 始终未定义
node js multer file upload not working. req.file and req.files always undefined
我正在尝试将文件上传到我的服务器,但 req.file
和 req.files
在我的 POST REST 端点上始终未定义。
我要上传的内容是一个“.dat”文件,我期待 json 响应。
这是我的代码:
服务器端:
var express = require('express');
var multer = require('multer')
var upload = multer({ dest: 'uploads/' })
var app = express()
app.post('/creoUpload', upload.single('uploadFileField'), function(req, res, next) {
console.log("req.file = ",JSON.stringify(req.file)); //is undefined
console.log("req.files = ",JSON.stringify(req.files)); //also undefined
});
客户端:
<form id="creoUploadForm" action="/creoUpload" enctype="multipart/form-data" method="post">
<input type='file' name='uploadFileField'><br><br>
<input type='submit' value='Upload'/>
</form>
JS:
$( "#creoUploadForm" ).submit(function( event ) {
event.preventDefault();
var formData = new FormData($(this)[0]);
$.ajax({
url: '/creoUpload',
type: 'POST',
data: formData,
async: true,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
console.log("RETURN DATA IS: ",returndata);
},
error: function (err) {
console.log("ERROR: ",err);
}
});
});
我一直在玩这些领域,但它不起作用..有人看到我在这里做错了什么吗?
我正在遵循 https://www.npmjs.com/package/multer
中的示例
版本:
- 速成版:4.12.0
- 节点版本:6.5.0
- JQuery: 1.12.1
谢谢!
我有同样的问题,如果您查看 Error Handling 部分的文档,还有另一种实现方式,这对我有用。代码将是这样的:
var express = require('express');
var multer = require('multer');
var upload = multer({ dest: 'uploads/' });
var app = express();
app.post('/creoUpload', function(req, res, next) {
upload(req, res, function (err) {
if (err) {
// An error occurred when uploading
console.log('Err: ', err);
return;
} else {
console.log('req.file: ', JSON.stringify(req.file));
console.log('req.files: ', JSON.stringify(req.files));
return;
}
})
});
如果req.file
和req.files
是undefined
,那么问题是multer没有收到上传的文件和这个问题似乎与 jQuery
.
有关
不支持使用 jQuery 'v1.12.1' 上传 FormData,它根本不会发送任何内容。
我建议尝试使用 fetch Api 或将 jQuery 的版本更改为 3.3.1.
我已经测试了代码,当我将 jQuery 版本从 v1.12.1 更改为 时,我已成功将文件上传到我的服务器v3.3.1.
您正在使用 multer 作为中间件,因此在进入您的函数并打印之前,它已将图像上传到存储并从 req.files.
您可以通过两种方式访问 req.files。
将 multer 用作 finw3 声明的函数。
另一种解法是:
//代码开始
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '/filepath')
},
filename: function (req, file, cb) {
let filename = 'filenametogive';
req.body.file = filename
cb(null, filename)
}
})
var upload = multer({ storage: storage })
//代码结束
现在您可以访问 req.body.file
中的文件
不要将 contentType
设置为 false
,因为 POST 方法需要 contentType = 'w-xxx-form-urlencoded'
,这是 JQ 的默认值。
我正在尝试将文件上传到我的服务器,但 req.file
和 req.files
在我的 POST REST 端点上始终未定义。
我要上传的内容是一个“.dat”文件,我期待 json 响应。
这是我的代码:
服务器端:
var express = require('express');
var multer = require('multer')
var upload = multer({ dest: 'uploads/' })
var app = express()
app.post('/creoUpload', upload.single('uploadFileField'), function(req, res, next) {
console.log("req.file = ",JSON.stringify(req.file)); //is undefined
console.log("req.files = ",JSON.stringify(req.files)); //also undefined
});
客户端:
<form id="creoUploadForm" action="/creoUpload" enctype="multipart/form-data" method="post">
<input type='file' name='uploadFileField'><br><br>
<input type='submit' value='Upload'/>
</form>
JS:
$( "#creoUploadForm" ).submit(function( event ) {
event.preventDefault();
var formData = new FormData($(this)[0]);
$.ajax({
url: '/creoUpload',
type: 'POST',
data: formData,
async: true,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
console.log("RETURN DATA IS: ",returndata);
},
error: function (err) {
console.log("ERROR: ",err);
}
});
});
我一直在玩这些领域,但它不起作用..有人看到我在这里做错了什么吗?
我正在遵循 https://www.npmjs.com/package/multer
中的示例版本:
- 速成版:4.12.0
- 节点版本:6.5.0
- JQuery: 1.12.1
谢谢!
我有同样的问题,如果您查看 Error Handling 部分的文档,还有另一种实现方式,这对我有用。代码将是这样的:
var express = require('express');
var multer = require('multer');
var upload = multer({ dest: 'uploads/' });
var app = express();
app.post('/creoUpload', function(req, res, next) {
upload(req, res, function (err) {
if (err) {
// An error occurred when uploading
console.log('Err: ', err);
return;
} else {
console.log('req.file: ', JSON.stringify(req.file));
console.log('req.files: ', JSON.stringify(req.files));
return;
}
})
});
如果req.file
和req.files
是undefined
,那么问题是multer没有收到上传的文件和这个问题似乎与 jQuery
.
不支持使用 jQuery 'v1.12.1' 上传 FormData,它根本不会发送任何内容。 我建议尝试使用 fetch Api 或将 jQuery 的版本更改为 3.3.1.
我已经测试了代码,当我将 jQuery 版本从 v1.12.1 更改为 时,我已成功将文件上传到我的服务器v3.3.1.
您正在使用 multer 作为中间件,因此在进入您的函数并打印之前,它已将图像上传到存储并从 req.files.
您可以通过两种方式访问 req.files。
将 multer 用作 finw3 声明的函数。
另一种解法是:
//代码开始
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '/filepath')
},
filename: function (req, file, cb) {
let filename = 'filenametogive';
req.body.file = filename
cb(null, filename)
}
})
var upload = multer({ storage: storage })
//代码结束
现在您可以访问 req.body.file
中的文件不要将 contentType
设置为 false
,因为 POST 方法需要 contentType = 'w-xxx-form-urlencoded'
,这是 JQ 的默认值。