2017-06-02 154 views
0

我已經能夠使用NodeJS/Express/Amazon S3/Multer一次設置上傳單個圖像的過程。它完美的作品。我一直在嘗試更改代碼以允許用戶一次上傳多個圖像。到目前爲止,我一直非常失敗。我如何更改我的代碼以允許多個圖像一次上傳?謝謝!上傳多張圖片 - NodeJS和Amazon S3

aws.config.update({ 
    secretAccessKey: '*****************', 
    accessKeyId: '******', 
    region: 'us-east-2' 
}); 

var s3 = new aws.S3(); 


var upload = multer({ 
    storage: multerS3({ 
     s3: s3, 
     bucket: 'myfiles', 
     key: function (req, file, cb) { 
      var fileExtension = file.originalname.split(".")[1]; 
      var path = "uploads/" + req.user._id + Date.now() + "." + fileExtension; 
      cb(null, path); 
     } 
    }) 
}); 


router.post("/", upload.array('image', 1), function(req, res, next){ 

     var filepath = undefined; 

    if(req.files[0]) { 
     filepath = req.files[0].key; 
    }...... 

回答

2

你已經完成了艱難的一部分,所有什麼ü需要做的就是改變你的HTML文件輸入,使其接受多個文件,像這樣

<input type="file" name="img" multiple> 

和更改文件的數量數組您灣的最大文件數上傳

upload.array('image', 1) 

upload.array('image', x) 

其中(x)是每次上傳文件的最大數量

EDIT1:更新

這是一種完整的例子&,以避免 「太大的實體問題」

var express = require("express"); 
var app = express(); 

var multer = require('multer'); 
var cookieParser = require('cookie-parser'); 
var path = require('path'); 

var router = express.Router(); 
app.use("/", router); 

app.use(bodyParser.json({limit: "50mb"})); 
app.use(cookieParser()); 
var urlencodedParser = bodyParser.urlencoded({ 
    extended: true, 
    parameterLimit: 50000 
}); 

// in case u want to c the requsted url 
router.use(function(req, res, next) { 
    console.log('Request URL: ', req.originalUrl); 
    next(); 
}); 

//the files will b uploaded to folder name uploads, html file input name is uploadedFile 
app.post('/your/route', urlencodedParser, function(req, res) { 

      var storage = multer.diskStorage({ 
       destination: function(req, file, callback) { 
        callback(null, './uploads'); 
       }, 
       filename: function(req, file, callback) { 
        var fname = file.fieldname + '-' + Date.now() + path.extname(file.originalname); 
        callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname)); 
       } 
      }); 
      var upload_photos = multer({ 
       storage: storage 
      }).array('uploadedFile', 3); 
      upload_photos(req, res, function(err) { 
      // uploading files 
     }); 

    });