【问题标题】:Get multerS3 key from controller从控制器获取 multerS3 密钥
【发布时间】:2021-01-14 13:23:40
【问题描述】:

我正在使用 multer 在 Amazon S3 中存储文件。我需要从我的控制器模块中获取文件的 multerS3 密钥以供以后访问。我的路线模块:

var express = require('express');
var router = express.Router();
var post_controller = require('../controllers/postController')
var aws = require('aws-sdk');
var multer = require('multer');
var multerS3 = require('multer-s3');
var mongoose = require('mongoose');
const s3 = new aws.S3();
const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: 'compressor-input',
    metadata: function(req, file, cb) {
      cb(null, {fieldName: file.fieldname});
    },
    key: function (req, file, cb) {
      cb(null, mongoose.Types.ObjectId())
    }
  })
});

router.post('/:id/upload', upload.array('item_images', 12), post_controller.images_upload);

【问题讨论】:

    标签: express amazon-s3 multer


    【解决方案1】:

    MulterS3 不公开任何文件特定参数。您应该在控制器中使用 S3.putObject() 并在传递给 router.post 函数的中间件或控制器模块中生成密钥。 Express-fileupload 在使用 S3.putObject() 时很有用,因为它在 express 请求对象中公开文件,如下所示:req.files

    【讨论】:

      【解决方案2】:

      req.files 将包含亚马逊返回的有关上传文件的所有信息。

      app.post('/upload', upload.array('photos', 3), function(req, res, next) {
        
        console.log(req.files)
        
        res.send('Successfully uploaded ' + req.files.length + ' files!')
      })
      

      【讨论】:

        猜你喜欢
        • 2016-08-28
        • 1970-01-01
        • 2014-02-14
        • 1970-01-01
        • 1970-01-01
        • 2018-02-08
        • 2012-03-14
        • 1970-01-01
        • 2014-02-15
        相关资源
        最近更新 更多