Мое приложение django позволяет пользователям загружать изображения в свою учетную запись.Я использую JQuery файл загрузки для асинхронной обработки.В моем представлении загрузки я использую PIL для выполнения некоторых основных манипуляций с изображениями (изменяйте размер, поворачивайте при необходимости).
Соответствующая часть представления для загрузки изображения ниже:
def group_photo_upload_desktop(request):
if request.method == 'POST':
try:
group_id = request.POST.get('group_id')
uploaded_image = request.FILES.get("image", default=None)
image = Image.open(uploaded_image)
image = autorotate_image(image)
image = resize_image(image)
Иногда,Я начал видеть сбой кода, когда PIL пытается открыть изображение.Изображение с ошибкой всегда имеет формат .heic и на данный момент встречается только с одним пользователем (всего 7 пользователей, поэтому выборка невелика), который загружает изображение с iPhone (не уверен в точной версии).
Что меня действительно смущает, так это то, что подавляющее большинство изображений .heic загружаются очень хорошо для пользователя и часто загружаются успешно после нескольких часов задержки.
Ниже приведена трассировка недавней ошибки.
File "/home/EscapeKit/socialwaiver/core/views_group_detail_desktop.py", line 308, in group_photo_upload_desktop
image = Image.open(uploaded_image)
File "/home/EscapeKit/.virtualenvs/venv/lib/python3.5/site-packages/PIL/Image.py", line 2622, in open
% (filename if filename else fp))
OSError: cannot identify image file <TemporaryUploadedFile: 20190706_154803.heic (application/octet-stream)>
И request.FILES
<MultiValueDict: {'image': [<TemporaryUploadedFile: 20190706_154803.heic (application/octet-stream)>]}>
Я получил от пользователя отправившую мне недостающую фотографию, но не смог сам повторить ошибку.Опять же, ошибка редкая (большинство изображений .heic вместе с другими изображениями загружаются нормально), но достаточно часто, чтобы стать серьезным раздражением для меня и пользователя.
Любая помощь будет принята с благодарностью.Это меня совершенно озадачило.