Python App Engine - 用于非图像的Blobstore

时间:2015-02-18 02:18:56

标签: python google-app-engine

在我的Python Appengine' app'我被要求附上任何文件'所以我有以下代码片段来显示'那些文件......

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 ==&#39; image&#39;)。如果没有,则显示一个链接,以便用户可以下载该文件并查看它们。

然而,虽然这在开发中有效,但在我的笔记本电脑(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云端存储。我仍然得到完全相同的错误。如果blob不是图像,则get_serving_url函数会出错。对于不是图像的文件,是否存在等效文件?

https://cloud.google.com/appengine/docs/python/tools/webapp/blobstorehandlers#BlobstoreUploadHandler的示例提供了一个非常好的例子,说明我想要做的事情,除了我可能想要添加人物简历而不是他们的照片。

由于 大卫

1 个答案:

答案 0 :(得分:0)

解决了我的问题。我试图在一个屏幕上做太多事情&#39;

如果blob是图像 - get_serving_url,如上所述 如果blob不是图像 - 显示指向不同页面的链接(target =&#39; _blank&#39;)执行以下操作(几乎从另一个SO帖子复制):

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

诀窍是在用户请求时在同一页面和新页面上显示一个图像blob(点击链接)

大卫