У меня установлено приложение на Rails, где каждый пользователь может загрузить аватар.Изображение загружается непосредственно в Amazon S3 с помощью HTTP Post.Пока все работает, за исключением того, что пользователь может загружать файлы любого типа.
Я использую вилку плагина d2s3 от camelpunch.Вот помощники:
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', но Amazon, похоже, игнорирует это.В документах сказано, чтобы настроить его так, как это.Я делаю что-то не так?
Кроме того, когда загружается файл, размер которого превышает заданный максимальный размер файла, приложение просто останавливается.S3 не отвечает с сообщением об ошибке xml.Можно ли это исправить?
Спасибо!
Тим