【问题标题】:Upload to S3 using aws-sdk and Node/Express使用 aws-sdk 和 Node/Express 上传到 S3
【发布时间】:2017-10-17 07:54:13
【问题描述】:

我一直在关注本指南Simple file upload to S3 using aws-sdk and Node/Express,试图让用户通过 S3 上传图片。由于某种原因,我无法让它工作。我将如何修复我的代码以纠正错误?

我得到的错误是:TypeError:无法读取未定义的属性“0”。

    var aws             = require('aws-sdk');
    var multerS3        = require('multer-s3');
    var  multer          = require("multer");

    (Not real codes)
    aws.config.update({
        secretAccessKey: 'QWUdawup',
        accessKeyId: 'GHQWD1A',
        region: 'us-east-2'
    });

       var s3 = new aws.S3();

    var upload = multer({
        storage: multerS3({
            s3: s3,
            bucket: 'medstayfiles',
            key: function (req, file, cb) {
                console.log(file);
                cb(null, file.originalname); //use Date.now() for unique file keys
            }
        })
    });



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

        var filepath = undefined;
        if(req.files[0]) {
            filepath = req.files[0].key; // 'uploads/xxxxx.extension'
        }

        var newRentals = {filepath: filepath}

        Rentals.create(newRentals, function(err, newlyCreated){
            if(err){
                console.log(err);
            } else {
                //redirect back to rentals page
                res.redirect("/rentals");
            }
        });
    });

【问题讨论】:

  • 你能显示你的路由器配置吗?什么是中间件.isLoggedin?

标签: node.js mongodb amazon-web-services express multer


【解决方案1】:

您没有提及错误出现的位置,但根据您的代码,req.files 似乎未定义。您可能需要添加适当的中间件来处理文件上传。

实际上,如果您接受来自网络用户的帖子,您应该让他们使用预签名的 URL 或上传表单直接上传到 S3。为自己省去麻烦和带宽。

【讨论】:

  • 这很好。你有任何关于如何做到这一点的例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 2017-01-10
  • 2015-04-18
相关资源
最近更新 更多