thumbnail是images.Image()的一个实例,没关系 - 我可以将它保存到ndb数据存储区并按照此处的说明进行操作:Displaying Blob Images in Python (App Engine)
一切似乎都运行正常,但我无法导航到我的开发服务器上生成的URL(此时无法在gae上尝试)。我的工作如下:
blobstore_file = files.blobstore.create(mime_type='image/jpg')
with files.open(blobstore_file, 'a') as f:
f.write(thumbnail)
files.finalize(blobstore_file)
url = images.get_serving_url(blobstore_file)
当我去Blobstore Viewer时,我能够很好地看到图片。但是,生成的URL
http://localhost:8080/_ah/img//blobstore/writable:VjNUUUVINDZEOE9BQTlSMTNKSVFIMEJQN1RMWUIyUjFNUTROQjlZVjlKQlBSME1aR1c4M1NKRENRUVA3UktDSA==
返回400 Bad Request,这是日志中抛出的错误:
ERROR 2014-04-24 12:36:58,508 blob_image.py:168] Failed to parse image path "/_ah/img//blobstore/writable:VkFEMDVQMjNSNVQyT1NGTDFWQjMxRDU4SzhKM1hJOEMzNk5DQzgxOTlEWUtKRUhMQlQ0WTlGMFpCNFlXQU9DVA=="
任何帮助都将非常感激,因为谷歌搜索没有任何改变。谢谢,
编辑:按照radia建议进行更改后,我现在收到错误信息如下:
WARNING 2014-04-24 13:57:37,025 tasklets.py:409] suspended generator transaction(context.py:941) raised AttributeError('Key' object has no attribute 'reference')
ERROR 2014-04-24 13:57:37,025 webapp2.py:1553] 'Key' object has no attribute 'reference'
Traceback (most recent call last):
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1536, in __call__
rv = self.handle_exception(request, response, e)
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1530, in __call__
rv = self.router.dispatch(request, response)
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/home/radek/google_appengine/google/appengine/ext/deferred/deferred.py", line 309, in post
self.run_from_request()
File "/home/radek/google_appengine/google/appengine/ext/deferred/deferred.py", line 304, in run_from_request
run(self.request.body)
File "/home/radek/google_appengine/google/appengine/ext/deferred/deferred.py", line 146, in run
return func(*args, **kwds)
File "/home/radek/google_appengine/google/appengine/ext/ndb/utils.py", line 179, in inner_wrapper
return wrapped_decorator(func, args, kwds, **options)
File "/home/radek/google_appengine/google/appengine/ext/ndb/model.py", line 3718, in transactional
func, args, kwds, **options).get_result()
File "/home/radek/google_appengine/google/appengine/ext/ndb/tasklets.py", line 325, in get_result
self.check_success()
File "/home/radek/google_appengine/google/appengine/ext/ndb/tasklets.py", line 371, in _help_tasklet_along
value = gen.send(val)
File "/home/radek/google_appengine/google/appengine/ext/ndb/context.py", line 937, in transaction
result = callback()
File "/home/radek/google_appengine/google/appengine/ext/ndb/model.py", line 3726, in <lambda>
return transaction_async(lambda: func(*args, **kwds), **options)
File "/home/radek/prasowalnia/models.py", line 75, in create_link
blob_key = files.blobstore.get_blob_key(blobstore_file)
File "/home/radek/google_appengine/google/appengine/api/files/blobstore.py", line 126, in get_blob_key
namespace='')])[0]
File "/home/radek/google_appengine/google/appengine/api/datastore.py", line 651, in Get
return GetAsync(keys, **kwargs).get_result()
File "/home/radek/google_appengine/google/appengine/api/datastore.py", line 626, in GetAsync
return _GetConnection().async_get(config, keys, local_extra_hook)
File "/home/radek/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1565, in async_get
pbs = [key_to_pb(key) for key in keys]
File "/home/radek/google_appengine/google/appengine/ext/ndb/model.py", line 629, in key_to_pb
return key.reference()
但不幸的是,这可能是这里概述的真正的错误。只有当我在事务中运行它时才会出现此错误。否则,一切正常,我能够从网址中检索图像就好了。
答案 0 :(得分:1)
我已经遇到过这个问题,请尝试使用blob_key的用户image.get_serving_url()方法
blobstore_file = files.blobstore.create(mime_type='image/jpg')
with files.open(blobstore_file, 'a') as f:
f.write(thumbnail)
files.finalize(blobstore_file)
blob_key = files.blobstore.get_blob_key(file_name)
url = images.get_serving_url(blob_key )
您将获得有效的网址