【问题标题】:How to use multer-s3 in aws lambda handler as middleware如何在 aws lambda 处理程序中使用 multer-s3 作为中间件
【发布时间】:2019-01-11 23:35:43
【问题描述】:

我正在尝试将 multipart/form-data 表单发送到 AWS-Lambda 方法。 我需要能够将文件发送到 S3,并使用传入的字符串参数,我需要将元数据记录到 RDS。

现在,我可以使用 expressmulter-s3 来做到这一点,如下所示;

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

var s3 = new AWS.S3();
const app = express();

var upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: 'my-bucket-name',
    metadata: function (req, file, cb) {
      cb(null, Object.assign({}, req.body));
    },
    key: function (req, file, cb) {
      cb(null, Date.now().toString() + '.fileExtension')
    }
  })
})

app.post('/data', upload.array('file'), function(req, res, next) {
  // here using req.files, i can save metadata to RDS
})

我的问题是,是否可以在 AWS Lambda 方法中使用 multer-s3?如果答案是否定的,或者不推荐,请您指出正确的方向吗?

谢谢..

【问题讨论】:

    标签: node.js amazon-s3 aws-lambda multipartform-data multer-s3


    【解决方案1】:

    我知道问题发布已经有一段时间了,但是为了将来可能会在这里结束的人们:

    简答:不推荐。为什么?作为表单数据的一部分发送的文件有一些奇怪的处理,不确定它是通过 API Gateway 还是 S3。我花了一整天的时间尝试使用与您提到的方法类似的方法从 SPA Angular 应用程序上传图像,但我无法让它工作:我能够访问请求中的文件,之前由 Multer 解析,并有效地将其中的每一个放入 S3 存储桶,但图像已损坏。不确定它是否适用于其他类型的文件,但这种方法需要更多的工作,而且感觉有点 hacky。 从您的 AWS 账户(即不使用任何 AWS 服务或 EC2 实例)将文件上传到 S3 存储桶的最佳和最简单的方法是,IMO,使用Presigned URLs。 您可以查看this article,这可能会为您指明正确的方向。

    也就是说,你可以configure API Gateway to allow your Lambda to receive binary files。如果您使用的是无服务器,以下是一个让事情变得更容易的插件:https://github.com/maciejtreder/serverless-apigw-binary

    【讨论】:

    • 大家都明白发生了什么吗?我的意思是 API 网关对它损坏文件的请求做了什么。我有同样的问题
    • 您好,感谢您的回答。我尝试添加插件,但对我不起作用。该文件已上传,但页面为空。任何帮助表示赞赏。
    猜你喜欢
    • 2017-01-10
    • 2021-08-27
    • 2020-11-09
    • 2020-05-14
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2015-07-07
    相关资源
    最近更新 更多