S3直接上传限制文件类型

时间:2016-07-08 03:30:16

标签: ruby-on-rails ruby amazon-s3

我生成这样一个预先签名的帖子:(注意:我使用的是aws-sdk v1)

 @s3_direct_post = S3_BUCKET.presigned_post(
                            key: "uploads/#{SecureRandom.uuid}/${filename}", 
                            success_action_status: '201',
                            acl: 'public-read',
                            content_type: 'image/png'
                            )

我想将用户上传限制为只有png文件,但这不起作用,它允许所有类型的文件。

2 个答案:

答案 0 :(得分:1)

不确定这对你有多大帮助,因为我没有测试过。

但是根据这个documentation,我想你可以通过使用这样的东西来解决这个问题:

bucket.presigned_post.where(:content_type).starts_with("image/png")

也请在s3 direct upload restricting file size and type上提及此答案。

请注意,如果您错过了这一点并希望它可能会有所帮助,我想指出这一点。

答案 1 :(得分:1)

在您的示例中使用的content_type是一个参数,其值用于告诉S3上载对象的内容类型实际上是 - 即您已确定它的内容是 - 不限制允许的内容。

根据应用程序以及此限制的重要程度,您需要在上传后在客户端或服务器上验证上传的正版内容类型。

没有简单的解决方案。 S3信任您,生成已签名的帖子上传,知道正在上传的对象的内容类型并相应地进行设置,因此它接受您发送的值。