0

同じ App Engine ドメインでホストされている AJAX 中心の Web アプリケーションで、App Engine (Blobstore -> Google Cloud Storage) への大きなファイルのアップロードを処理したいと考えています。

ブラウザーの JavaScript クライアントから App Engine サーバーを呼び出し、応答として URL (「create_upload_url」から作成) を受け取りますが、クロス ドメイン エラーを発生させずにファイルを取得してその URL にアップロードする方法に行き詰まっています。Blobstore レシーバーで CORS ヘッダーを設定できないようで、ドメインがアプリの提供元のドメインと一致しません ('create_upload_url' はサブドメインのプレフィックスに '1-dot-' を追加します)。

これに関するアイデアや経験はありますか?

1つのアイデア:「1-dot-」プレフィックスは特定の展開されたバージョンを参照しているように見えるため、おそらくURLを解析し、そのようなプレフィックスを削除してドメインを同じにし、そのURLに送信してドメインミスを回避します-マッチ。

4

2 に答える 2

1

これを取り上げてくれてありがとう。これは現在のリクエスト処理の性質によるものであり、最適な方法を見つけるためにブレインストーミングを行っている間、これはバグであると考えています。

現在、ユーザーがリクエストを行うと、

https://myappid.appspot.com/_ah/api/myApi/v1/methodpath

次に、Google の API インフラストラクチャによってルーティングされ、

https://version-dot-myappid.appspot.com/_ah/spi/MyApi.Method

version、アプリケーションのデフォルト バージョンmyappidです。

更新: 以前に提案された回避策 a la URL を javascript でホスト名とパスに解析するにはどうすればよいですか? 動作しないことが示されています。これは、呼び出す App Engine インスタンスが自分のcreate_upload_urlバージョン/ホストを「認識」しているため、これを変更するとエラーが発生するためです。

于 2013-06-19T21:31:06.007 に答える
1

私のプログラムでは、この問題は特定の状況でのみ発生し、オンラインでのみ発生し、開発サーバーでは発生しません。問題の原因はわかりましたが、appengine のバグです

私が持っているページのJavaScriptで:

$.ajax({
          type: "POST",
          url: upload_url,
          data: formData,
          contentType: false,
          processData: false
            })....

python コードで upload_url を取得します: upload_url = blobstore.create_upload_url('/uploadDragImage')

そのページを呼び出すと: https://comunapp-dot-skilled-999.appspot.com/item?categ=news

ajax 呼び出しは完全に機能しますが、パラメーターを追加すると:

https://comunapp-dot-skilled-999.appspot.com/item?categ=news &pippo

生成された upload_url は意味がないようです。ajax 呼び出しで次のエラーが発生します。

混合コンテンツ: ' https://comunapp-dot-skilled-999.appspot.com/item?categ=news&luca ' のページは HTTPS 経由で読み込まれましたが、安全でない XMLHttpRequest エンドポイントを要求しました ' http://temporary-blobstore-error .appspot.com/ '. このリクエストはブロックされました。コンテンツは HTTPS 経由で提供する必要があります。

ページの URL の「&」は、URL の生成を中断します: blobstore.create_upload_url('/uploadDragImage')

注: 開発サーバーは動作します。問題はオンラインのみです。

考えられる解決策は、& の使用を避け、別のものを使用してパラメーターを区切ることです。

于 2014-11-29T16:09:54.727 に答える