S3.getSignedUrl接受多个内容types

我正在使用react-s3-uploader节点包,它接受一个signingUrl来获得一个signedUrl来存储一个对象到S3中。

目前我已经configuration了一个lambda函数(带有一个API网关端点)来生成这个signedUrl。 经过一番修改之后,我得到了它的工作,但注意到我必须在我的lambda函数中定义content-type ,如下所示:

 var AWS = require('aws-sdk'); const S3 = new AWS.S3() AWS.config.update({ region: 'us-west-2' }) exports.handler = function(event, context) { console.log('context, ', context) console.log('event, ', event) var params = { Bucket: 'video-bucket', Key: 'videoname.mp4', Expires: 120, ACL: 'public-read', ContentType:'video/mp4' }; S3.getSignedUrl('putObject', params, function (err, url) { console.log('The URL is', url); context.done(null, {signedUrl: url}) }); } 

问题是,我想这个签名的url能够接受多种types的video文件,我试着将ContentType设置为video/* ,这是行不通的。 另外,由于这个lambda端点并不是实际上传的,所以我不能事先将filetype传递给这个函数。

您必须find一种方法来发现文件types,并将其作为parameter passing给Lambda函数。 这里没有一个替代scheme,这里有一个预先签名的PUT

PUT的请求签名过程没有提供通配符或多个/替代值。

在其他人正在寻找工作答案的情况下,我最终发现react-s3-uploader确实将内容types和文件名传递给了getSignin url(除了我之前忘记了通过API网关传递查询外),所以我能够解压缩为lambda中的event.params.querystring.contentType

然后在params中,我简单地设置{ContentType: event.params.querystring.contentType} ,现在它接受所有的文件格式。