IOError: не может идентифицировать файл изображения для движка приложения на prod, но не localhost - PullRequest
0 голосов
/ 11 марта 2019

Я получаю 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, поэтому проблема не связана с закрытием

1 Ответ

0 голосов
/ 11 марта 2019
files[0].file.seek(0) 

- это ответ, я должен перемотать его:)

...