2010-11-25 79 views
2

我寫的OBJ-C的應用程序,並想上傳一個二進制文件的大小數兆到我的AppEngine上的服務器(Python)的二進制數據AppEngine上的斑點。我猜我需要爲此使用blob實體,但我不確定如何去做這件事。我一直在使用http請求和響應來發送和接收數據,但他們已經用字符串編碼。有人可以建議我如何去做同樣的obj-c應用程序的blob嗎?我看到一些涉及http請求的例子,但它們似乎適用於網頁,我不太熟悉它。也許有任何體面的教程或演練?使用在OBJ-C的應用程序

我基本上不能完全肯定,如果我應該其編碼爲HTTP請求和發送回通過響應,如何讓二進制數據到來自客戶端的HTTP字符串,以及如何將其發送在下載我的二進制數據時從服務器正確備份。我想也許這種方法必須完全不同於我用param1 = val & param2 = val2樣式格式將值編碼到我的請求中,但不確定。

我應該使用blobstore服務嗎?一個重要的注意事項是,我聽說blob有一個1兆的限制,但我需要存儲2-3兆像素的音頻文件(至少1.8 meg)。

回答

2

我最近有做類似的事情,但它是通過套接字連接二進制數據。給客戶端使用XML,以服務器作爲數據流。發送它時,我結束了base64編碼二進制數據。這有點羅嗦,但特別是在客戶端,它使事情變得更容易處理,在我的XML中不需要擔心特殊字符。然後我用NSData將它翻譯成真正的二進制格式。我使用this code來進行編碼和解碼,搜索「cyrus」以查找我使用的片段,這裏有幾個可以工作。

在你的情況我會改變你的HTTP請求後數據呼叫,而不是把它所有的URL。如果你不確定有什麼不同,看看here

我不熟悉Python,但你可以嘗試here對這一目標的幫助。

希望有所幫助。

編輯 - 它看起來像斑點是要走的路。有關字符串/ blob類型的this link以及有關使用blob的更多信息,請參閱this link

+0

我假設你有能力使用appengine服務器對此進行編碼/解碼,但我從未使用過它,所以我猜這可能是窗外的,如果情況並非如此。如果你不能,那麼將它存儲爲blob會比編碼它並將其存儲爲文本更好。 – slycrel 2010-12-03 22:03:25

0

有一個在這裏的三個問題:

  1. 您應該使用二進制數據的BLOB?
  2. 你怎麼發佈二進制數據,並從應用程序引擎使用它
  3. 你如何檢索應用程序引擎的二進制數據

我不能回答你「應該」使用斑點,只有你會知道答案,這很大程度上取決於您試圖存儲的數據類型以及如何使用它。以圖像爲例(這可能是最流行的用例)。您希望用戶使用手機拍照,上傳照片,然後與其他用戶分享照片。這很好用,但是@slycrel表明你會遇到記錄大小的限制。這可以是可行的,例如你可以使用python圖像庫(pil)縮小圖像尺寸。

要發佈的二進制數據,請參見this question。最好緩存2個副本,縮略圖和全尺寸。這種方式只能在上傳時調整大小。如果您想更好地使用它,可以使用應用程序引擎的新後臺作業功能將圖像處理排隊以備後用。無論哪種方式,您都需要返回新創建的blob的ID,以便您可以從設備中引用它,而無需其他http請求。

要檢索數據,我認爲最好的方法是將BLOB當作自己的資源來對待。調整你的路線,使得任何給定的斑點具有獨特的URL:

http://myweb/images/(thumbnail|fullsize)/<blobid>.(jpg|png|gif) 

哪裏BLOBID是動態的,JPG,PNG或GIF可用於獲取特定類型的圖像。縮略圖或全尺寸可用於檢索您發佈時保存的較小或較大的版本。

相關問題