2009-07-19 130 views
0

我有應用程序寫在GWT和谷歌的AppEngine/Java的託管。在這個應用程序中,用戶可以選擇將視頻/音頻/文本文件上傳到服務器。這些文件可能很大,最高可達1GB左右,因爲GAE/J不支持大文件,我必須使用另一臺服務器來存儲這些文件。如果瀏覽器中沒有跨域安全功能,這將很容易實現。所以,我在想的是讓GAE服務器與我的服務器(Glassfish或任何其他Java服務器,如果需要的話)通話以告訴文件的URL,並且如果可能的話發送上傳文件的狀態(上傳多少%),這樣我就可以在客戶端屏幕上顯示狀態。這是我想要做的。讓兩臺服務器互相交談

當用戶負載GWT頁面上存儲的GAE/J,他/她將文件上傳到我的服務器,然後我的服務器將發送響應返回給GAE和GAE將發送響應到客戶端。 如果這種情況是可能的,那麼實施GAE到Glassfish對話的最佳方式是什麼?

回答

1

其實在此之前,也許你可以嘗試使用第一種方法通過繞過使用iframe的瀏覽器的跨域安全。有一些準備好使用這個組件,但對於你的問題,哪些是可用的,我不知道。只是谷歌的這些組件...

0

做到這一點,你建議使用的原始方式URL Fetch Service 這樣做的另一種方式的缺點是,你在網頁內的多個網站引入依賴。
使用網址提取服務的缺點是,您必須按達到免費配額後轉移的字節數支付費用。

0

一種選擇是等待 - Blob存儲區進行限制不會永遠是50MB!

如果你趕時間,不過,我建議像下面的方法:

  1. 讓你的App Engine應用程序生成簽名令牌表示用戶有權上傳文件。令牌應該包括當前的日期和時間,用戶的用戶ID,最大文件大小以及任何其他相關信息,並且應該使用HMAC-SHA1使用您的App Engine應用程序和您的服務器都知道的密鑰進行簽名。
  2. 返回的形式登載有對你的blob的URL託管服務器,並嵌入你在步驟1.如果要進度通知生成的標記,你可以使用一個工具,如plupload和服務形式的用戶IFrame由您的上傳服務器提供服務。
  3. 當用戶將文件上傳到您的服務器時,服務器應該將重定向返回到您的App Engine應用程序,並在重定向URL中嵌入一個新的令牌。該令牌再次用公共密碼簽名,包含新上傳文件的ID。
  4. 當你的App Engine應用程序接收對重定向URL的請求時,它知道上傳完成,並且可以在數據存儲記錄新文件的ID等。

或者,您可以使用Amazon's S3,它已經支持所有這些與它的HTML Form support