Как сказал @wiesion в комментарии к вопросу, вы можете попытаться сбросить буфер с помощью data.seek(0)
.
Почему?Ну, в вашем коде у вас есть это
data = request.FILES['file']
data_50 = request.FILES['file']
, означающее, что data
и data_50
будут указывать на один и тот же файл.Когда вы вызываете data.read()
, содержимое читается, и текущая позиция остается в конце файла.
Когда вы позже вызываете data_50.read()
, текущая позиция уже находится в конце (потому что она такая жефайл как data
), и больше нет содержимого для чтения, поэтому вызов read()
не возвращает содержимого.Таким образом, изображение не будет сохранено.
Вызывая data.seek(0)
(или data_50.seek(0)
или request.FILES['file'].seek(0)
), вы говорите этому файлу снова поместить текущую позицию в начало файла, чтобыследующий вызов read()
может снова вывести весь файл.
input_file = BytesIO(data.read())
image_crop = Image.open(input_file)
print('print 2')
# ADD THIS LINE TO YOUR CODE
# it modifies the 'data' object, which is the same as 'data_50'
data.seek(0)
# Problem starts.
input_file_50 = BytesIO(data_50.read())
image_crop_50 = Image.open(input_file_50)
Другой способ, которым вы можете попробовать (без вызова .seek(0)
), - передать результат .read()
в переменную:
file_content = request.FILES['file'].read()
input_file = BytesIO(file_content)
input_file_50 = BytesIO(file_content)
image_crop = Image.open(input_file)
image_crop_50 = Image.open(input_file_50)
Может быть, вы могли быпопробуйте эту версию и дайте нам знать, если она решит вашу проблему.