gpt4 book ai didi

ruby-on-rails - Amazon S3 直接上传无法识别文件的内容类型

转载 作者:行者123 更新时间:2023-12-04 20:23:15 24 4
gpt4 key购买 nike

我设置了我的 Rails 应用程序,每个用户都可以上传头像。图像使用 HTTP Post 直接上传到 Amazon 的 S3。到目前为止,除了用户能够上传任何类型的文件之外,一切正常。

我正在使用camelpunch 的d2s3 插件的一个分支。以下是 helper :

  policy = Base64.encode64(
"{'expiration': '#{expiration_date}',
'conditions': [
{'bucket': '#{bucket}'},
['starts-with', '$key', '#{key}'],
{'acl': '#{acl}'},
{'success_action_redirect': '#{redirect}'},
['starts-with', '$Content-Type', '#{content_type}'],
['content-length-range', #{min_filesize}, #{max_filesize}]
]
}").gsub(/\n|\r/, '')

signature = b64_hmac_sha1(D2S3::S3Config.secret_access_key, policy)
out = ""
out << %(
<form action="https://#{bucket}.s3.amazonaws.com/" method="post" enctype="multipart/form-data" id="#{options[:form][:id]}" class="#{options[:form][:class]}">
<div>
<input type="hidden" name="key" value="#{key}/${filename}" />
<input type="hidden" name="AWSAccessKeyId" value="#{access_key_id}" />
<input type="hidden" name="acl" value="#{acl}" />
<input type="hidden" name="success_action_redirect" value="#{redirect}" />
<input type="hidden" name="policy" value="#{policy}" />
<input type="hidden" name="signature" value="#{signature}" />
<input type="hidden" name="Content-Type" value="#{content_type}" />
<input name="file" type="file" />#{submit_button}
</div>
</form>
)

我的内容类型设置为“image/jpeg”,但亚马逊似乎忽略了这一点。在文档中,它说要像这样设置它。难道我做错了什么?

此外,当上传大于设置的最大文件大小的文件时,应用程序就会停止。 S3 不会回复 xml 错误消息。这可以解决吗?

谢谢!

蒂姆

最佳答案

亚马逊无法确定文件的实际内容类型,因为这需要分析二进制数据。

亚马逊提供在上传时声明的内容类型的文件,因此该政策仅限制用户上传将使用不允许的内容类型提供的文件。例如,没有人可以破解您的表单并将某些内容用作“应用程序/pdf”。但是,他们可以上传声称它是“图像/jpeg”的 PDF 文件,该文件将作为 jpeg 提供给消费者,从而导致图像损坏。

关于ruby-on-rails - Amazon S3 直接上传无法识别文件的内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com