Python 是否可以使用boto从Google App Engine中的S3读取文件?
我想在Google App Engine的沙箱中操作存储在S3中的pickle python对象。我使用boto的建议: 但这需要我写一个文件,在GAE沙箱中显然不是犹太文件 我怎样才能避开这件事?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
非常感谢您的帮助您可以将数据写入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()