我试图将multipart/form-data表单发送到AWS方法。我需要能够向S3发送文件,并且使用传入的字符串参数,我需要将元数据记录到RDS。
现在,我可以使用express和multer-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吗?如果答案是否定的,或者是不推荐的,你能给我指出正确的方向吗?
谢谢..
发布于 2019-01-30 19:34:56
我知道这个问题发布已经有一段时间了,但为了将来可能会在这里结束的人们:
简短的回答:不推荐。为什么?对于作为表单数据一部分发送的文件有一些奇怪的处理,不确定是由API还是S3发送的。我花了整整一天的时间试图用你提到的类似的方法从SPA角度应用程序上传图像,但我就是无法做到:我能够访问请求中的文件,之前由穆特解析过,并且有效地将每一个文件放到一个S3桶中,但是图像被破坏了。不确定它是否适用于其他类型的文件,但是这种方法需要更多的工作,而且感觉有点麻烦。将文件从AWS帐户外部上传到S3桶(即不使用任何AWS服务或EC2实例)的最佳和最简单的方法是使用预先签名的URL。您可以检查这篇文章,这可能会指向正确的方向。
话虽如此,你可以配置API网关以允许Lambda接收二进制文件。如果您使用的是Serverless,下面是一个插件,它可以使事情变得更简单:https://github.com/maciejtreder/serverless-apigw-binary
发布于 2022-09-27 20:22:05
您需要在“二进制媒体类型”中配置对Gateway (API ->设置)的二进制支持,添加允许的mime类型

https://stackoverflow.com/questions/51683399
复制相似问题