У меня есть модель с двумя полями изображений, исходное изображение и миниатюра.
Когда я обновляю новое исходное изображение, сохраняю его и затем пытаюсь прочитать исходное изображение для обрезания/масштабирования его к миниатюре, я получаю "операцию ввода-вывода на закрытом файле" ошибка от PIL.
Если я обновляю исходное изображение, не сохраняйте исходное изображение и затем пытайтесь прочитать исходное изображение для обрезания/масштабирования, я получаю "попытку считать из закрытого файла" ошибку от PIL.
В обоих случаях исходное изображение на самом деле сохраняется и доступно в более поздних циклах запроса/ответа.
Если я не обрезаю/масштабирую в единственном цикле запроса/ответа, но вместо этого загружаю на одной странице и затем обрезаю/масштабирую на другой странице, это все хорошо работает.
Это, кажется, кэшируемый буфер, снова используемый некоторые как, или PIL или хранилищем файлов Django. Какие-либо идеи о том, как сделать ImageField читаемым после сохранения?
Больше информации... ImageField ясно закрывает базовый файл после сохранения. Там какой-либо путь состоит в том, чтобы вызвать обновление ImageField? Я вижу, что несколько человек использовать ищут (0), но это не будет работать в этом случае.
В 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)