Возможно ли прочитать файл из S3 в Google App Engine, используя boto? - PullRequest
7 голосов
/ 16 октября 2010

Я хочу манипулировать маринованным объектом python, хранящимся в S3 в песочнице Google App Engine. Я использую предложение в документации Бото :

from boto.s3.connection import S3Connection

from boto.s3.key import Key

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

но это требует от меня записи в файл, который, очевидно, не является кошерным в песочнице GAE.

Как я могу обойти это? Большое спасибо за любую помощь

Ответы [ 2 ]

7 голосов
/ 18 октября 2010

Вам вообще не нужно записывать в файл или StringIO.Вы можете вызвать key.get_contents_as_string(), чтобы вернуть содержимое ключа в виде строки.Документы для ключа: здесь .

3 голосов
/ 16 октября 2010

Вы можете записать в 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()
...