Я получаю IOError: cannot identify image
за приведенный ниже код для развертывания ядра приложения, но он отлично работает для localhost.
Я создаю первое изображение, но не могу получить второе при производстве, но успешно как на локальном хосте
В моем app.yaml:
libraries:
- name: PIL
version: "1.1.7"
Я пробовал также с
libraries:
- name: PIL
version: latest
Соответствующий код:
class UploadFile(webapp2.RequestHandler):
def post(self):
data = self.request.body
values = self.request.POST.itervalues()
files = [v for v in values if isinstance(v, cgi.FieldStorage)]
img_data = data
dataBytesIO = io.BytesIO(img_data) #log label "toto"
my_img = Image.open(files[0].file)
my_img.thumbnail((500, 500), Image.ANTIALIAS)
thumb_io = BytesIO()
my_img.save(thumb_io, my_img.format)
thumbnail_filename_input = create_file(self, thumb_io.getvalue(), "room_picture_thumbnail_" + "somename", files[0].type)
size = 1000, 1000 #log label "titi"
my_img_big = Image.open(files[0].file) #!!! Fails on production but works on localhost
width, height = my_img_big.size
if width > 1000 or height > 1000:
my_img_big.thumbnail(size,Image.ANTIALIAS)
thumb_io2 = BytesIO()
my_img_big.save(thumb_io2, my_img_big.format)
filename_input = create_file(self, thumb_io2.getvalue(), "room_picture_" +"somename", files[0].type)
дает ошибку ниже:
my_img_big = Image.open(files[0].file)
File "/base/alloc/tmpfs/dynamic_runtimes/python27g/b3d733487011db10/python27/python27_lib/versions/third_party/PIL-1.1.7/PIL/Image.py", line 1980, in open
raise IOError("cannot identify image file")
IOError: cannot identify image file
И снимок журнала при отладке драйвера стека приложений:
files
[0]
fp
<type '_io.BytesIO'>
disposition_options
file
<type 'cStringIO.StringO'>
innerboundary
''
done
1
disposition
'form-data'
qs_on_post
None
strict_parsing
0
outerboundary
'----WebKitFormBoundarykEX5mAPk1xmDW6B3' # only this line differs between two -> '----WebKitFormBoundaryZxbkkzZRFdunz9Fr' at log labels "toto" and "titi"
name
u'aa.png'
_FieldStorage__file
None
list
None
filename
u'/frpy/uploadFile'
keep_blank_values
True
headers
length
-1
type_options
type
'image/png'
Я даже попытался описать код ниже на движке приложения от локального с
remote_api_stub.ConfigureRemoteApiForOAuth(
'{}.appspot.com'.format(project_id),
'/_ah/remote_api')
и код:
import urllib2 as urllib
import io
fd = urllib.urlopen("https://i.stack.imgur.com/mVt7n.jpg?s=328&g=1")
image_file = io.BytesIO(fd.read())
im = Image.open(image_file)
im.thumbnail((500, 500), Image.ANTIALIAS)
thumb_io = BytesIO()
im.save(thumb_io, im.format)
size = 1000, 1000
my_img_big = Image.open(image_file)
width, height = my_img_big.size
if width > 1000 or height > 1000:
my_img_big.thumbnail(size,Image.ANTIALIAS)
thumb_io2 = BytesIO()
my_img_big.save(thumb_io2, my_img_big.format)
работает дважды на image_file
работает хорошо.
Что может быть проблемой, работает на localhost, но не работает на prod?
Совет: my_img.close () работает на localhost, но не на prod, обратите внимание также, что когда я пытаюсь выяснить files[0].file.close()
на localhost, он дает мне ValueError: I/O operation on closed file
, поэтому проблема не связана с закрытием