如何从网址将图片上传到Blobstore?
Google App Engine的文件API现在支持通过编程方式创建blobstore的blob。
我正在尝试通过HTTP获取一张图片,并把它存储到blobstore中:
file_name = files.blobstore.create(mime_type='image/jpeg')
image = urllib2.urlopen(url)
with files.open(file_name, 'a') as f:
f.write(image) # LINE 142
files.finalize(file_name)
blob_key = files.blobstore.get_blob_key(file_name)
这段代码出现了错误:
File "/Users/willmerydith/repos/spam/admin.py", line 142, in post
f.write(image)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/files/file.py", line 364, in write
self._make_rpc_call_with_retry('Append', request, response)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/files/file.py", line 472, in _make_rpc_call_with_retry
_make_call(method, request, response)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/files/file.py", line 229, in _make_call
rpc.check_success()
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 558, in check_success
self.__rpc.CheckSuccess()
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/apiproxy_rpc.py", line 156, in _WaitImpl
self.request, self.response)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/apiproxy_stub.py", line 80, in MakeSyncCall
if request.ByteSize() > self.__max_request_size:
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/files/file_service_pb.py", line 1923, in ByteSize
n += self.lengthString(len(self.data_))
AttributeError: addinfourl instance has no attribute '__len__'
我怀疑是因为我超过了大小限制。这个问题是因为我写入图片到blobstore的方式不对吗?Blobstore的大小限制是2GB,而我测试的图片大小都在200-300KB以下。
2 个回答
0
这个已经不管用了,因为文件的接口在2015年9月就被关闭了。
5
urllib2.urlopen
返回的是一个 urllib2.addinourl
对象,而不是一个字符串。你不能直接把这个对象写入你的文件。
试试在第142行用 f.write(image.read())
。