我尝试使用 Nodejs 和 Expressjs (4.0) 上传图像大约两天了。
到目前为止,我尝试了几种中间件,例如:Formidable、Blueimp、Busboy、Multer...
用其中的一些方法,我可以正确地将单个图像保存在临时文件夹中,但当我尝试上传多个图像时,问题就出现了。
所以,我的简单 Controller 如下所示:
exports.postAccountImages = function(req, res, next) {
User.findById(req.user.id, function(err, user) {
console.log(req.files);
});
};
我收到的总是单个对象,例如:
{
files: {
// data...
}
}
{
files: {
// data...
}
}
但不在数组内,因此我无法使用 for
管理传入的所有文件。
我需要更改图像的名称,并将它们保存在基于 user.id 名称的动态文件夹中...但这似乎太棘手了。
我可以一张一张地执行此操作,但我希望在多个图像上执行此操作。
您知道中间件或如何正确使用我已经尝试过管理多个文件的中间件之一吗?
编辑:
我在客户端使用了 Dragzone。 这里没什么特别的,遵循最初的教程:
Jade :
#uploader.fileInput
h3 Drop your images here!
Js:
var myDropzone = new Dropzone(document.body, {
url: "/account/images", // Set the url
autoQueue: true,
paramName: "file",
uploadMultiple: true,
autoProcessQueue: true,
clickable: ".fileInput"
});
最佳答案
希望这能解决您的问题,这是我上传多个文件的方法:
Node.js:
router.post('/upload', function(req , res) {
var multiparty = require('multiparty');
var form = new multiparty.Form();
var fs = require('fs');
form.parse(req, function(err, fields, files) {
var imgArray = files.imatges;
for (var i = 0; i < imgArray.length; i++) {
var newPath = './public/uploads/'+fields.imgName+'/';
var singleImg = imgArray[i];
newPath+= singleImg.originalFilename;
readAndWriteFile(singleImg, newPath);
}
res.send("File uploaded to: " + newPath);
});
function readAndWriteFile(singleImg, newPath) {
fs.readFile(singleImg.path , function(err,data) {
fs.writeFile(newPath,data, function(err) {
if (err) console.log('ERRRRRR!! :'+err);
console.log('Fitxer: '+singleImg.originalFilename +' - '+ newPath);
})
})
}
})
确保您有enctype="multipart/form-data"
我希望这可以帮助你;)
关于node.js - Nodejs如何处理多张图片上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27255203/