我使用this question作为模板来解决同样的问题,但我在发帖时遇到了问题。我有这些组件:
urlfetch
将其再次发布到... 如果我使用文件输入,组件#3可以正常工作。但我不太明白如何从图片网址获取urlfetch
所需的内容。我的进程超时或从最终处理程序获得500响应。
# 1
class URLMainHandler(RequestHandler):
def get(self):
return render_response('blob/upload_url.html',
upload_url=url_for('blobstore/upload/url'))
# 2
class URLUploadHandler(RequestHandler):
def post(self):
import urllib
# Get the posted image URL.
data = urllib.urlencode({'file': self.request.form.get('file')})
# Post image to blobstore by calling POST on the file upload handler.
result = urlfetch.fetch(url=blobstore.create_upload_url(url_for('blobstore/upload')),
payload=data,
method=urlfetch.POST)
return self.redirect(url_for('blobstore/url'), result.status_code)
# 3
class UploadHandler(RequestHandler, BlobstoreUploadMixin):
def post(self):
# 'file' is the name of the file upload field in the form.
upload_files = self.get_uploads('file')
blob_info = upload_files[0]
response = redirect_to('blobstore/serve', resource=blob_info.key())
# Clear the response body.
response.data = ''
return response
再次,this is the process I'm following。谢谢你的帮助!
答案 0 :(得分:3)
您可以在不使用blobstore api的情况下实现相同目的。我想你必须使用urlfetch()。content方法获取url并获取内容并将其存储为blob属性。
url = "imageurl"
result = urlfetch.fetch(url)
if result.status_code == 200:
prof.avatar = db.Blob(result.content)
有关将数据存储区中的图像存储和提供为blob的进一步参考。
上查看此帖子了解更多信息答案 1 :(得分:3)
您不能只将图像作为blobstore HTTP请求的有效负载包含在内,并希望它能够理解如何处理它。 blobstore需要application/multipart-form-data
类型的消息,这是上传到blobstore时浏览器提供的消息。有一个库可以为您here执行此操作。
SDK的未来版本将包括以编程方式在blobstore中存储blob的功能,这样就不需要这种讨厌的黑客攻击。
如果您的图片尺寸小于1MB,则更简单的解决方案是将图像直接存储在数据存储区中,正如Abdul在答案中所建议的那样。