【发布时间】:2015-02-18 02:18:55
【问题描述】:
在我的 Python Appengine“应用程序”中,我被要求“附加任何文件”,因此我有以下代码 sn-p 来“显示”这些文件...
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=='image')。如果没有,则会显示一个链接,以便用户可以下载文件并以他们可以的方式查看它。
但是,虽然这在开发中有效,但在我的笔记本电脑(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)
转换错误
所有示例都使用图像,我对它们没有任何问题,在开发中确实没有问题。关于我可能错过的任何想法?
非常感谢 大卫
按照建议,我将上述内容更改为使用 Google Cloud Storage。我仍然得到完全相同的错误。如果 blob 不是图像,则 get_serving_url 函数会出错。不是图像的文件是否有等价物?
https://cloud.google.com/appengine/docs/python/tools/webapp/blobstorehandlers#BlobstoreUploadHandler 的示例提供了一个非常好的示例,说明我正在尝试做的事情,除了我可能想添加此人的简历而不是他们的照片。
谢谢 大卫
【问题讨论】:
-
当您说“这在开发中有效”时,我认为您的意思正好相反——它在部署到 apppot 时有效,但在开发应用服务器中不,例如“on你的笔记本电脑”。我建议避免使用 blobstore 并使用更新的、闪亮的cloud.google.com/appengine/docs/python/googlecloudstorageclient 代替(在部署中,旧的 blobstore API 是在此基础上实现的——但使用真正的 GCS 在部署和本地开发中都应该可以正常工作,在后一种情况下是 GCS在您自己的当地时间之上实施)。
-
我去看看,然后告诉你。感谢您的快速回复。
-
我仍然看到你在 Q 中使用 blobstore API -- 你的代码在哪里切换到 cloud.google.com/appengine/docs/python/googlecloudstorageclient ...?