2014-12-02 72 views
0

大約兩天我試圖使用Nodejs和Expressjs(4.0)上傳圖像。如何在Nodejs中處理多個圖像上傳

我tryed幾個中間件,到目前爲止,如:厲害,Blueimp,打雜,Multer ...

少數的這些我正確保存的臨時文件夾,但問題的單個圖像是當我嘗試上傳多個圖像。

所以,我簡單的控制器的樣子:

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的客戶端。 這裏沒有什麼特別,隨後初步教程:

玉:

#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" 
}); 
+0

您可能要包括你的上傳表單/代碼是什麼樣子的客戶端上側。 – mscdex 2014-12-02 17:33:18

+0

完成,我跟着一個簡單的教程 – 2014-12-02 17:36:34

+0

一切我嘗試做限制我的文件上傳到2.好像我不能上傳每次超過2個文件... – 2014-12-02 17:48:38

回答

1

希望這能解決你的問題,這是我的方法,以多個上傳文件:

的NodeJS:

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的」

我希望這給你一個手;)