Django дает “операцию ввода-вывода на закрытом файле” ошибка при чтении из сохраненного ImageField

У меня есть модель с двумя полями изображений, исходное изображение и миниатюра.

Когда я обновляю новое исходное изображение, сохраняю его и затем пытаюсь прочитать исходное изображение для обрезания/масштабирования его к миниатюре, я получаю "операцию ввода-вывода на закрытом файле" ошибка от PIL.

Если я обновляю исходное изображение, не сохраняйте исходное изображение и затем пытайтесь прочитать исходное изображение для обрезания/масштабирования, я получаю "попытку считать из закрытого файла" ошибку от PIL.

В обоих случаях исходное изображение на самом деле сохраняется и доступно в более поздних циклах запроса/ответа.

Если я не обрезаю/масштабирую в единственном цикле запроса/ответа, но вместо этого загружаю на одной странице и затем обрезаю/масштабирую на другой странице, это все хорошо работает.

Это, кажется, кэшируемый буфер, снова используемый некоторые как, или PIL или хранилищем файлов Django. Какие-либо идеи о том, как сделать ImageField читаемым после сохранения?

Больше информации... ImageField ясно закрывает базовый файл после сохранения. Там какой-либо путь состоит в том, чтобы вызвать обновление ImageField? Я вижу, что несколько человек использовать ищут (0), но это не будет работать в этом случае.

9
задан Rob Osborne 12 June 2010 в 21:02
поделиться

1 ответ

В ImageField есть ошибка, которую я обнаружил и отправил в проект django .

Если у вас есть простая модель с ImageField ?, следующий код завершится ошибкой с «операцией ввода-вывода для закрытого файла»:

instance = MyClass.objects.get(...)
w = instance.image.width
h = instance.image.height
original = Image.open(instance.image)

Решение состоит в том, чтобы повторно открыть файл:

instance = MyClass.objects.get(...)
w = instance.image.width
h = instance.image.height
instance.image.open()
original = Image.open(instance.image)
18
ответ дан 4 December 2019 в 11:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: