如何使用Google App Engine的Blobstore保存网页图片

4 投票
3 回答
3767 浏览
提问于 2025-04-16 09:13

更新

这个问题最开始提出来的时候,程序化创建文件(比如通过网址)还不被支持。但现在情况已经改变,具体可以查看这个链接:http://code.google.com/appengine/docs/java/blobstore/overview.html#Writing_Files_to_the_Blobstore

我正在访问几个不同的API来获取图片。我的应用是基于GAE和Python的,我想用Blobstore来保存这些图片。GAE的Blobstore文档提供了如何通过表单将图片保存到Blobstore的清晰示例,但没有直接从网址保存的说明。

http://code.google.com/intl/iw/appengine/docs/python/blobstore/overview.html#Writing_Files_to_the_Blobstore

我想知道如何将http://api.website.com/images/foo.jpg保存到Blobstore。

3 个回答

0

你可以写一个额外的处理程序,把输入的网址内容上传到存储空间处理程序。也就是说,自动化表单提交的过程。你需要对存储空间处理程序发送一个POST请求,并对图片进行网址编码。

不过唯一的问题是,如果文件太大,你可能会遇到超时的错误。

2

用HTTP POST向你自己的表单提交数据是可以的。我没有尝试提交文件,但我可以告诉你怎么提交一个表单。你可以从网上获取文件,把它添加到表单提交中,这样文件就会存储在你的blobstore里。

import urllib
data = urllib.urlencode({"id":str(id), "password" : self.request.POST['passwd'], "edit" : "edit"})
result = urlfetch.fetch(url="http://www.montao.com.br/upload",
payload=data,
method=urlfetch.POST,
headers={'Content-Type': 'application/x-www-form-urlencoded'})

这里还有一个类似的问题,答案可以在这里找到。

希望这对你有帮助。

2

使用新的文件API和urlfetch API,你应该可以通过表单传递图片的链接,然后在服务器端获取这个图片,并把它写入到blobstore中:

http://code.google.com/intl/iw/appengine/docs/python/blobstore/overview.html#Writing_Files_to_the_Blobstore

撰写回答