2017-06-02 165 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 
     }); 

    });