Python 从Blobstore进入S3?

Python 从Blobstore进入S3?,python,google-app-engine,amazon-s3,blobstore,Python,Google App Engine,Amazon S3,Blobstore,我正在把数据上传到blobstore。它应该只是暂时的,并从我的AppEngine应用程序上传到AmazonS3 似乎我只能通过Blobstore API中描述的BlobDonwloadHandler获取数据: 所以我尝试从我的应用程序中获取特定于blob的下载URL(还记得我昨天的问题吗)。从AppEngine(而不是开发服务器)中获取内部URL是可行的,即使它的风格不好——我知道 但是,得到这个斑点是行不通的。我的代码如下所示: result = urllib2.urlopen('http:

我正在把数据上传到blobstore。它应该只是暂时的,并从我的AppEngine应用程序上传到AmazonS3

似乎我只能通过Blobstore API中描述的BlobDonwloadHandler获取数据:

所以我尝试从我的应用程序中获取特定于blob的下载URL(还记得我昨天的问题吗)。从AppEngine(而不是开发服务器)中获取内部URL是可行的,即使它的风格不好——我知道

但是,得到这个斑点是行不通的。我的代码如下所示:

result = urllib2.urlopen('http://my-app-url.appspot.com/get_blob/'+str(qr.blob_key))
我越来越

下载错误:ApplicationError:2

提出人:

文件 “/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py”, 第332行,在_get _fetch _result中 引发下载错误(str(err))

即使在搜索之后,我真的不知道该怎么办

我看到的所有教程都只关注通过URL返回给用户的服务。但是我想从Blobstore中检索blob并将其发送到S3存储桶。有没有人知道我怎么会意识到这一点,或者说这是不可能的


提前感谢。

您可以使用BlobReader访问该Blob并将其发送到S3


你为什么要这样做?为什么不直接将文件上传到S3?@Nick:这样做的一个原因是让GAE调整照片的大小。@Nick:我使用S3和GoogleStorage作为永久存储,用户先上传到blobstore,然后再决定保存数据的位置。@Michael,这看起来不必要的麻烦-而且它还将您限制在1MB,因为这就是您可以使用URLFetch发送的所有内容。可以将表单上传到S3;这将是一种更简洁的方法。@尼克:该应用程序应该是一种针对不同私有和公共云服务(亚马逊S3、谷歌存储、Eucalyptus的Walrus等)的存储管理解决方案。不同服务的分配应由AppEngine完成,以节省用户的时间和带宽。使用基于表单的上传将使用户的需求增加三倍。我将尝试使用BlobReader类的Calvins方法,也许我可以实现一些“脏”的工作。小心不要超时将真正大的文件从GAE上传到S3。@Amir:这应该如何工作?在循环中调用blob_reader=blobstore.BlobReader(blob_键,buffer_size=1048576)并附加到S3上传流?Boto不支持这一点,如果你看一下botos上传方法,比如set_contents_from_string方法,就不可能一个接一个地发送小块(比如1MB)。所以BlobReader类在这种情况下不会有帮助,或者我忽略了什么?我从未使用过boto,但您应该能够将整个blob读入缓冲区对象,并对其进行编码和发送(可能使用\u文件中的set\u contents\u?)。可以使用StringIO将缓冲区假装为文件。