如何在AWS lambda处理程序中使用Multer-S3作为中间件 [英] How to use multer-s3 in aws lambda handler as middleware

查看:22
本文介绍了如何在AWS lambda处理程序中使用Multer-S3作为中间件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将多部分/表单数据表单发送到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?如果答案是否定的,或者不被推荐,你能给我指个正确的方向吗?

谢谢..

推荐答案

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

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

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

这篇关于如何在AWS lambda处理程序中使用Multer-S3作为中间件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆