2009-05-09 19 views
15

GWTを使用してGoogle App Engineにデータをアップロードしようとしています。私はFileUploaderウィジェットを使用しており、サーブレットはInputStreamを使用してデータを読み込み、データストアに直接挿入します。ローカルで実行すると、大きなファイルを正常にアップロードできますが、GAEにデプロイすると30秒のリクエスト時間で制限されます。これを回避する方法はありますか?または、ファイルを小さな塊に分割し、小さな塊を送信する方法はありますか?Google App Engine大容量ファイルアップロード

答えて

1

あなたは別のサーバーにアップロードする必要があります.30秒のタイムアウトを回避することはできません。方法があれば、私を修正してください!私はどのように知ってほしい!

+0

これは私が恐れていたものです。私はあまりにも悪くないと思う...私はストレージのためのAmazon S3を使用することができます。私はそれが記憶部分を単純化するだろうと思うが、同じ場所にすべてを保つことはまだいい。 – user103920

8

現在のところ、GAEではファイルのアップロード(および応答サイズ)に制限があり、他の多くのものでは1 MBの制限があります。たとえネットワーク接続が30秒間のウィンドウ内で10 MBを超えるように十分速くても、それは無駄になります。グーグル・ヴァン・ロッサムは、昨日、Pycon Italia Treに言及していると聞きましたが、将来的にこれらの制限を克服する計画があると言いました(少なくともGAEのユーザーはクォータを超過します。支払いをしていないGAEのユーザーにも適用され、一般的にGAEを無料で利用するには小さなクォータを受け入れる必要があります)。

+0

http://googleappengine.blogspot.com/2010/12/happy-holidays-from-app-engine-team-140.html – theosp

0

GAEに保存するときに最も近いのはチャンクに分割し、ダウンロードするときは別々のAJAXリクエストを発行してまとめます。

0

小さなBLOBにデータをチャンクすることに同意し、2つのテーブルを持ち、1つはメタデータ(ファイル名、サイズ、ダウンロード数など)を含み、その他にはチャンクが含まれます。外部キー、私はそれが可能だと思う...

またはすべてのチャンクをアップロードするときには、1つのテーブルを持つ1つのブロブにそれらをまとめて置くことができます。

しかし、問題がある、それがローカルファイルシステムにアクセスできるように、あなたがあなたの顧客によって署名され、信頼される必要があるJavaアプレット、などのチャンク・データを、提供するためにシッククライアントが必要になります

0

の場合あなたの要求は要求時間を使い果たしており、あなたができることはほとんどありません。ファイルが大きすぎると、クライアント上でチャンクする必要があります(フラッシュやJava、puploadのようなアップロードフレームワークなど)。

ファイルをアプリケーションに取得すると、データストアの制限という別の問題が発生します。ここでは、2つのオプションがあります。あなたはあなたが事実上無制限のサイズのブロブを保存することができbigblobaeのようなものを使用することができ、大きなアップロード

  • を50メガバイトを処理するための非常に素敵なAPIを持ってBlobStoreサービスを使用することができます

  • 1

    30秒の応答時間制限は、コードの実行にのみ適用されます。したがって、リクエスト本体の一部としての実際のファイルのアップロードは、そのファイルから除外されます。タイマーは、要求がクライアントによってサーバーに完全に送信され、コードが送信された要求の処理を開始すると開始されます。したがって、クライアントの接続がどれほど遅いかは関係ありません。

    Uploading file on Google App Engine using Datastore and 30 sec response time limitation