2017-04-03 122 views
1

我正在使用react-s3-uploader节点包,它将signingUrl用于获取用于将对象存储到S3中的signedUrl。S3.getSignedUrl接受多个内容类型

目前我配置了一个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能够接受多种类型的视频文件,并且我尝试将ContentType设置为video/*,这不起作用。另外,因为这个lambda端点并不是真正需要上传的,所以我无法事先将文件类型传递给这个函数。

回答

1

您必须找到一种方法来发现文件类型并将其作为参数传递给Lambda函数。在这里,没有其他替代方案,并且预先签署PUT

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

+0

谢谢你让我知道!我只是想确保没有更好的方法,然后才能实施类似'hackish'解决方案。 –

0

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

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