5

最近、Java Gae アプリにファイルをアップロードする際に 2 つの問題が発生しました。私は blobstore docで説明されている手法を使用しています。

  1. 通常のファイルでは、ときどき (たとえば 15% の場合)、クライアントは "503 Service Unavailable" を受け取ります。
  2. 高解像度の画像 (例: 7000x10000) では、クライアントは常に「400 Bad Request」を受け取ります。

どちらの場合も、サーバーのエラー メッセージはログに記録されず、BLOB は正しく書き込まれますが、successPath URL ( createUploadUrlのコールバック) は呼び出されません。アップロードを処理する GAE エンドポイントが何らかの理由でクラッシュするようです。

私のクライアントは、GWT でラップされた js XMLHttpRequest です。

public native void uploadWithXMLHttpRequest(UploadForm uploadForm) /*-{
    var fd = new FormData();
    var files = uploadForm.@mypackage.UploadForm::getFiles()();  
    for (var i = 0; i < files.length; i++) {
        fd.append("uploadFile"+i, files[i]);
    }
    var xhr = new XMLHttpRequest();
    //xhr.upload.addEventListeners... omitted
    xhr.open("POST", uploadForm.@mypackage.UploadForm::getUploadUrl()());
    xhr.send(fd);
}

考えられる原因と解決策/回避策のアイデアはありますか? どうも。

4

4 に答える 4

1

この問題は、同じ問題を抱えている別のユーザーによって開かれた GAE チケットで議論されています: https://code.google.com/p/googleappengine/issues/detail?id=7619 (ところで、バグ追跡システムには「開始」がありますチケットに投票して通知を受け取ることができる機能)

于 2012-06-01T00:50:48.867 に答える
0

考えられる理由:

1 大きなファイル (> 1MB) をアップロードして、すべて書き込みます。ポータルに書き込む必要があります: 1 回の書き込み = 1MB。

2 リクエストに 30 秒以上かかります - バックエンドを使用してください。

于 2012-05-24T12:43:10.450 に答える
0

この場合、503 はアップロード情報をデータストアに書き込む際のエラーが原因です。M/S データストアを使用しているため、一時的なエラーが発生することがあります。アップロード情報をデータストアに書き込む際にエラーが発生する可能性を最小限に抑えるために、アプリを HRD に変換することをお勧めします。

400 エラーはアプリによって生成され、アプリケーション ログに記録されています。

于 2012-05-24T16:27:52.397 に答える