node.js - Nodejs如何处理多张图片上传

标签 node.js file-upload express

我尝试使用 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/

相关文章:

jquery - 如何克服从 Angular 2 到 Node/express 的 CORS?

javascript - 用于检查 CouchDB nodejs nano 中是否存在文档的自定义函数

javascript - Node - 跨平台编译 - PKG

node.js - 更改 Webstorm 中 Node js 调试库的控制台字体颜色

node.js - 使用 Node、EJS 和 Firebase 的实时数据库模板

node.js - Express 中的模块化路线

python - 我是否正确解析了这个 HTTP POST 请求?

file-upload - 如何将base64编码的文件发送到PlayFramework服务器?

jsf - 使用额外的 inputText 上传多个文件

session - 从 socket.io 回调中修改 session 数据