使用强大的节点文件上传不起作用
Node file uploading using formidable not working
我们想实现一个功能,通过 ajax
调用将多个文件上传到 ExpressJS 服务器和 return 它所有唯一的 url。
以下是我前端的示例代码:
var formData = new FormData();
for (var i = 0; i < nameId.length; i++) {
if($(nameId[i])[0].files[0]){
formData.append(nameId[i], $(nameId[i])[0].files[0], $(nameId[i])[0].files[0].name);
}
}
$.ajax({
url: '/upload-files',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(data){
console.log('upload successful!');
console.log(data);
}
});
在我们的路由器中,我们有以下代码片段来接受请求并存储文件:
router.post('/upload-files',function(req, res, next){
var form = new formidable.IncomingForm();
form.multiples = true;
form.uploadDir = path.join(__dirname, '/uploads');
form.on('file', function(field, file) {
console.log("File incoming");
fs.rename(file.path, path.join(form.uploadDir, file.name));
});
form.on('error', function(err) {
console.log('An error has occured: \n' + err);
});
form.on('end', function() {
res.end('success');
});
});
但是,路由器中什么也没有发生。请求进入路由器内部,但之后什么也没有。
这里有什么问题吗?在长时间等待请求失败后,我们在服务器端和客户端都没有收到任何错误。
求推荐。
谢谢
我能够通过添加和更新以下代码片段来解决它:
在上传请求处理函数中添加代码:
form.parse(req);
并在 app.js 中将以下代码片段更新为:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));
to(单独处理 multipart
数据)
app.use(bodyParser.json())
.use(bodyParser.urlencoded());
注意由于解析器的变化,启动服务器时会出现以下警告消息:
body-parser deprecated undefined extended: provide extended option
我的问题已通过更改我的 ajax 发送代码解决,如下所示:-
$.ajax({
url: '/postroute',
type: 'POST',
processData: false,
contentType: false,
cache: false,
data: formData,
enctype: 'multipart/form-data',
success: function(){
console.log('Uploaded sucessfully');
}
});
我们想实现一个功能,通过 ajax
调用将多个文件上传到 ExpressJS 服务器和 return 它所有唯一的 url。
以下是我前端的示例代码:
var formData = new FormData();
for (var i = 0; i < nameId.length; i++) {
if($(nameId[i])[0].files[0]){
formData.append(nameId[i], $(nameId[i])[0].files[0], $(nameId[i])[0].files[0].name);
}
}
$.ajax({
url: '/upload-files',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(data){
console.log('upload successful!');
console.log(data);
}
});
在我们的路由器中,我们有以下代码片段来接受请求并存储文件:
router.post('/upload-files',function(req, res, next){
var form = new formidable.IncomingForm();
form.multiples = true;
form.uploadDir = path.join(__dirname, '/uploads');
form.on('file', function(field, file) {
console.log("File incoming");
fs.rename(file.path, path.join(form.uploadDir, file.name));
});
form.on('error', function(err) {
console.log('An error has occured: \n' + err);
});
form.on('end', function() {
res.end('success');
});
});
但是,路由器中什么也没有发生。请求进入路由器内部,但之后什么也没有。
这里有什么问题吗?在长时间等待请求失败后,我们在服务器端和客户端都没有收到任何错误。
求推荐。 谢谢
我能够通过添加和更新以下代码片段来解决它:
在上传请求处理函数中添加代码:
form.parse(req);
并在 app.js 中将以下代码片段更新为:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));
to(单独处理 multipart
数据)
app.use(bodyParser.json())
.use(bodyParser.urlencoded());
注意由于解析器的变化,启动服务器时会出现以下警告消息:
body-parser deprecated undefined extended: provide extended option
我的问题已通过更改我的 ajax 发送代码解决,如下所示:-
$.ajax({
url: '/postroute',
type: 'POST',
processData: false,
contentType: false,
cache: false,
data: formData,
enctype: 'multipart/form-data',
success: function(){
console.log('Uploaded sucessfully');
}
});