2015-02-18 3 views
0

В моем Python Appengine «приложение» Я попросил, чтобы «прикрепить любой файл», таким образом у меня есть следующий фрагмент кода, чтобы «Дисплей» эти файлы ...Python App Engine - Blobstore для не-изображений

blobattach = '' 
blobmime = 'None' 
if pattachment.blobkey <> None: 
    blobattach = get_serving_url(pattachment.blobkey) # <-- line 104 
    blob_info = blobstore.BlobInfo.get(pattachment.blobkey) 
    blobmime = blob_info.content_type[:5] 
    blobname = blob_info.filename 

Используя следующий HTML

{% if blobmime == 'None' %} 
{% else %} 
    {% if blobmime == 'image' %} 
     <img src="{{ blobattach }}" alt='Attachment'/> 
    {% else %} 
     <br/> 
     <small><a class="fswideb" href="{{blobattach}}" Title="Download to view"><span>Download to view {{ blobname }}</span></a></small> 
    {% endif %} 
{% endif %} 

Если вложение является изображением, оно отображается (blobmime == 'изображение'). Если нет, отображается ссылка, поэтому пользователь может загрузить файл и просмотреть его, но они могут.

Однако, хотя это работает в разработке, на моем ноутбуке (Google App Engine Launcher), я получаю следующую ошибку при попытке «обслуживать» файл .xls. (Нет ошибок с вложениями .jpg)

File "/base/data/home/apps/s~fs-rentals/20140101.382312463312950329/fmntjobattachmaint.py", line 104, in display 
blobattach = get_serving_url(pattachment.blobkey) 
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/images/__init__.py", line 1794, in get_serving_url 
return rpc.get_result() 
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result 
return self.__get_result_hook(self) 
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/images/__init__.py", line 1892, in get_serving_url_hook 
raise _ToImagesError(e, readable_blob_key) 

TransformationError

Все примеры использования изображений и у меня нет никаких проблем с ними, действительно нет проблем в развитии. Любые мысли о том, что я мог пропустить?

Большое спасибо Дэвид

Как предположил я изменил выше, чтобы использовать Google Cloud Storage. Я все равно получаю точно такую ​​же ошибку. Ошибки функции get_serving_url, если капля не является изображением. Есть ли эквивалент файла, который не является изображением?

Образец в https://cloud.google.com/appengine/docs/python/tools/webapp/blobstorehandlers#BlobstoreUploadHandler представляет собой действительно хороший пример того, что я пытаюсь сделать, за исключением того, что я могу добавить резюме пользователя вместо своей фотографии.

Благодаря Дэвид

+1

когда вы говорите «это работает в развитии» Я думаю, что вы имеете в виду обратное - что он работает при развертывании в appspot, но ** не ** на сервере приложений разработки, например, «на вашем ноутбуке». Я бы рекомендовал избегать blobstore и использовать более новый, блестящий https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/ вместо него (при развертывании вместо этого реализован старый API-интерфейс blobstore, но с реальным GCS должен отлично работать как при развертывании, так и в локальном развитии, в последнем случае GCS реализуется поверх ваших собственных местных времен). –

+0

Я посмотрю и дам вам знать. Спасибо за быстрый ответ. –

+0

Я все еще вижу, что вы используете API blobstore в своем Q - где ваш код перешел на https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/ ...? –

ответ

0

Fixed мою проблему. Я пытался сделать слишком много на одном экране.

Если капля - это изображение - get_serving_url, как указано выше.
Если пятно не изображение - отображать ссылку на другую страницу (цель = «_ пустой»), который выполняет следующие действия (в значительной степени скопированы с другого SO поста):

if rmntjobattach.mntjobattachid <> 0 \ 
    and rmntjobattach.blobkey: 
     blob_info = blobstore.BlobInfo.get(rmntjobattach.blobkey) 
     self.send_blob(blob_info) 
    else: 
     self.error(404) 

Хитрость в том, чтобы отобразить изображение блоб на той же странице, и все остальное на новой странице, если пользователь запросил его (нажал на ссылку)

Дэвид

Смежные вопросы