FACEPALM UPDATE: Оказывается, я совсем забыл/упускать из виду тот факт, что я использовал старую вилку S3BotoStorage из https://github.com/gtaylor/django-athumb в моей памяти по умолчанию (даже хотя я установил django-хранилища). Текущая версия django-хранилищ не страдает от этой проблемы. Проблема заключалась в том, что заголовки типа контента были unicode, когда они нажимали boto, а boto избегает unicode, используя urllib.quoteplus
перед отправкой его на AWS. Это не ошибка Boto, так как заголовки должны быть преобразованы в строки, отличные от unicode, как-то по HTTP. Для более глубокого анализа см. https://github.com/boto/boto/issues/1669.Файлы загружены в S3 с S3BotoStorage в конечном итоге с неверном спасся мета-данные типа содержимого
Оригинал Вопрос
Я использую django_storage's S3BotoStorage в сочетании с FileField для загрузки файлов на Amazon S3. Вот мое поле:
downloadable_file = FileField(max_length=255, upload_to="widgets/filedownloads", verbose_name="file")
В настройках:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
Все работает насколько загрузки/загрузка идет.
Однако файлы хранятся в моем ковше с неправильным типом содержимого. Когда я просматриваю метаданные для файлов в моей консоли AWS S3, Content-Type файла отображается как «приложение% 2Fpdf» вместо «application/pdf», которое должно быть.
В случае, если вы говорите, что не имеет значения, это имеет значение. Встроенный PDF-ридер Google Chrome будет висеть на pdf с недопустимым типом контента, и клиент привлек это к моему вниманию.
Here's an example of a file uploaded through django-storages/boto. Если вы используете встроенный читатель в формате хром, я предполагаю, что он висит, как и для меня и для клиента, который сообщил об этом. Если вы используете браузер без хрома или плагин adobe или загружаете файл на диск, вы, вероятно, будете в порядке.
Если я вручную изменил метаданные содержимого контента с помощью консоли AWS на «application/pdf» (один из стандартных вариантов, который он предоставляет), тогда это будет хорошо.
Я предполагаю, что это ошибка с чем-то внутренним, так как boto создает документ политики AWS для загрузки файла, так как я ничего не делаю вне стандартного использования здесь. Тем не менее, я перешагнул код boto и не могу найти, где это происходит.
Может ли кто-нибудь предложить вам работу или привести меня к нарушившемуся коду в boto, чтобы я мог его исправить и отправить запрос на вытягивание?
бото == 2.9.5 Джанго-хранилища == 1.1.8
Going наградить щедрот, так как мое время истекает, и это звучит многообещающе. Я дам вам знать, как это происходит. –
Спасибо, я, вероятно, буду возиться с загрузкой PDF в не слишком отдаленном будущем, поэтому я надеюсь, что это сработает. – Fiver
Разве это не сработало? – Fiver