【问题标题】:Upload multiple images - NodeJS & Amazon S3上传多张图片 - NodeJS 和 Amazon S3
【发布时间】:2017-11-04 09:29:24
【问题描述】:

我已经能够使用 NodeJS/Express/Amazon S3/Multer 设置一次上传单个图像的过程。它完美地工作。我一直在尝试更改代码以允许用户一次上传多个图像。到目前为止,我非常不成功。如何更改下面的代码以允许一次上传多个图像?谢谢!

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;
    }......

【问题讨论】:

    标签: node.js amazon-web-services express file-upload amazon-s3


    【解决方案1】:

    你已经完成了困难的部分,你所要做的就是修改你的 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
            });
    
        });
    

    【讨论】:

      【解决方案2】:

      https://www.npmjs.com/package/multer-s3

      您可以使用此 npm 包进行 aws-s3 上传。我使用了相同的文件并保存文件没有任何问题。

      【讨论】:

        猜你喜欢
        • 2020-11-11
        • 2017-07-23
        • 1970-01-01
        • 2019-11-24
        • 1970-01-01
        • 2020-02-16
        • 2010-11-26
        • 1970-01-01
        • 2015-08-24
        相关资源
        最近更新 更多