我生成这样一个预先签名的帖子:(注意:我使用的是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文件,但这不起作用,它允许所有类型的文件。
答案 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信任您,生成已签名的帖子上传,知道正在上传的对象的内容类型并相应地进行设置,因此它接受您发送的值。