Python 是否可以使用boto从Google App Engine中的S3读取文件?

Python 是否可以使用boto从Google App Engine中的S3读取文件?,python,google-app-engine,amazon-s3,amazon-web-services,boto,Python,Google App Engine,Amazon S3,Amazon Web Services,Boto,我想在Google App Engine的沙箱中操作存储在S3中的pickle python对象。我使用boto的建议: 但这需要我写一个文件,在GAE沙箱中显然不是犹太文件 我怎样才能避开这件事? 非常感谢您的帮助您可以将数据写入blob并使用StringIO检索数据 from boto.s3.connection import S3Connection from boto.s3.key import Key from google.appengine.ext import db class

我想在Google App Engine的沙箱中操作存储在S3中的pickle python对象。我使用boto的建议:

但这需要我写一个文件,在GAE沙箱中显然不是犹太文件

我怎样才能避开这件事?
非常感谢您的帮助

您可以将数据写入blob并使用StringIO检索数据

from boto.s3.connection import S3Connection
from boto.s3.key import Key
from google.appengine.ext import db

class Data(db.Model)
    image = db.BlobProperty(default=None)

conn = S3Connection(config.key, config.secret_key)
bucket = conn.get_bucket('bucketname')
key = bucket.get_key("picture.jpg")
fp = StringIO.StringIO()
key.get_file(fp)

data = Data(key_name="picture.jpg")
data.image = db.Blob(fp.getvalue())
data.put()

您根本不需要写入文件或StringIO。您可以调用
key.get\u contents\u as\u string()
以字符串形式返回键的内容。钥匙的文件是。

谢谢,尼克。这是可行的,无需导入StringIO模块。我认为这显然是一个更好的解决方案。对于在家中跟随的任何人,我将pickle.load(content)更改为pickle.load(content),以处理类似字符串而不是类似文件的对象。我还建议在get_bucket调用中使用validate=False-ie bucket=conn.get_bucket(bucket_name,validate=False),因为boto尝试访问该bucket,如果没有访问权限,它将失败。有关更多信息,请参阅:另外,boto键有一个可以使用的.open()调用。
from boto.s3.connection import S3Connection
from boto.s3.key import Key
from google.appengine.ext import db

class Data(db.Model)
    image = db.BlobProperty(default=None)

conn = S3Connection(config.key, config.secret_key)
bucket = conn.get_bucket('bucketname')
key = bucket.get_key("picture.jpg")
fp = StringIO.StringIO()
key.get_file(fp)

data = Data(key_name="picture.jpg")
data.image = db.Blob(fp.getvalue())
data.put()