2011-03-02 40 views
1

我正在將數據上傳到blobstore。它應該只保留臨時狀態並從我的AppEngine應用程序上傳到Amazon S3。AppEngine:從Blobstore進入S3?

,因爲它似乎在Blob存儲API描述我只能通過BlobDonwloadHandler獲取數據:http://code.google.com/intl/de-DE/appengine/docs/python/blobstore/overview.html#Serving_a_Blob

於是,我就從我的應用程序中獲取該斑點特定下載URL(記得昨天我的問題)。從AppEngine(而不是開發服務器)獲取內部URL正在工作,即使它的風格很糟糕 - 我知道。

但得到blob不起作用。我的代碼如下所示:

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

,甚至搜索我真的不知道該怎麼做之後,我的

DownloadError: ApplicationError: 2

Raised by:

File "/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", line 332, in _get_fetch_result raise DownloadError(str(err))

我見過的所有教程都只關注通過URL向用戶提供服務。但我想從Blobstore中檢索blob並將其發送到S3存儲桶。任何人有任何想法我怎麼能意識到這一點,或者甚至是不可能的?

在此先感謝。

+0

你爲什麼這樣做?爲什麼不直接將文件上傳到S3? – 2011-03-03 03:26:07

+0

@尼克:做這件事的一個理由是讓GAE調整照片大小。 – Amir 2011-03-03 04:21:31

+0

@Nick:我正在使用S3和GoogleStorage進行永久存儲,用戶首先上傳到blobstore,然後決定哪裏需要保存數據。 – Michael 2011-03-07 18:20:44

回答

2

您可以使用BlobReader訪問該Blob並將其發送給S3。

http://code.google.com/intl/de-DE/appengine/docs/python/blobstore/blobreaderclass.html

+0

小心不要超時上傳從GAE到S3的真正大文件。 – Amir 2011-03-03 04:23:28

+0

@Amir:這應該如何工作?在循環中調用blob_reader = blobstore.BlobReader(blob_key,buffer_size = 1048576)並追加到S3上傳流?博託不支持這一點,如果你看看像set_contents_from_string方法這樣的botos上傳方法 - 不可能一個接一個地發送小塊(比如1MB)。所以BlobReader類在這種情況下不會有幫助,還是我忽略了某些東西? – Michael 2011-03-07 18:46:58

+0

我從來沒有使用boto,但你應該能夠將整個blob讀入緩衝區對象並進行編碼併發送(可能使用set_contents_from_file?)。您可以使用StringIO假裝緩衝區是一個文件。 – Calvin 2011-03-07 20:12:16

相關問題