2

サーバーから取得したファイルをアップロードしようとしています。ただし、フェッチされたファイルが 1MB を超える場合、S3 に保存されるのは 1KB の小さなファイルのみです。1MB 未満の場合、ファイルは適切に保存されます。

さまざまな方法を検索して試しましたが、どれも機能していません。ユーザーがボタンをクリックするとトリガーされるクラスを次に示します。

` class Fetch_by_button(webapp.RequestHandler):

def get(self):
    #1. fetch the file
    try: 
        result = urlfetch.fetch('http://someurl.com/music.mp3') # file with 2MB
        #result = urlfetch.fetch('http://anotherurl.com/document.pdf') #file with 900KB is working
    except DownloadError:
        print("URL fetch doesnt work properly")

    #2. search datastore UserData-model by userobject to get s3 credentials
    usr = users.get_current_user()
    query = UserData.gql("WHERE account =:1", usr)
    qr = query.get()

    #3. establish connection to s3
    conn = S3Connection(qr.s3_accesskey, qr.s3_secret_accesskey)

    #4. create bucket
    ak_lowercase = str.lower(str(qr.s3_accesskey))
    individual_bucket_name = ak_lowercase + '_' + usr.nickname()
    bucket = conn.create_bucket(individual_bucket_name)

    #5. generate key and assign to already created bucket
    k = Key(bucket)

    #6. name the key by some examplary filename
    k.key = 'justsomefilename'

    #7. save the correspondent value to the created key
    k.set_contents_from_string(result.content)`

なぜこれが起こるのか、私には手がかりがありません。私のコードの何か、AppEngine の制限、boto の何か、... 何か提案はありますか?

前もって感謝します。

4

1 に答える 1

2

AppEngineの最大リクエストサイズはurlfetchで1MBです。あなたのS3Connectionクラスはそれを使って実際の転送を行っていると思います。

応答は最大32MBになる可能性があるため、ダウンロードが機能します。

于 2011-03-07T20:10:27.213 に答える