3

HTML ページから Azure BLOB ストレージに画像ファイルをアップロードしようとしています。ここまでで、ブロブ コンテナー用の SAS を作成するための Web サービスを作成しました。これから、「blob アドレス」/「コンテナー名」/「blob 名」という形式の uri を作成しましたか? 「サス」。HTML ページにアップロード コントロールがあります。

次に、次のコードを使用してファイルをアップロードしようとしました。

var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open("PUT", blobPath);
xhr.send(upFile.files[0]);

ここで、blobPath は上記の uri であり、upFile は HTML アップロード コントロールです。

ファイルをアップロードしようとすると、uploadFailed ルーチンがトリガーされます。だから:これはこれを行う正しい方法ですか?アップロードによって返されたエラーをトラップして、何が問題なのかを確認するにはどうすればよいですか?

私の sas は次のようになります。

助けていただければ幸いです。

4

2 に答える 2

5

これは確かに正しい方法ですが、いくつかの点があります。

  1. x-ms-blob-typeリクエストにリクエストヘッダーを含める必要があり、その値はBlockBlob.
  2. また、これが機能するには、同じストレージ アカウントで HTML ページをホストする必要があることにも注意してください。これCORSは、現時点では Azure Blob Storage でサポートされていないためです。したがって、HTML ページが他のドメインでホストされている場合、CORS が原因でエラーが発生します。

SAS および AJAX を使用して BLOB をアップロードするには、次のブログ投稿が役立つ場合があります。

http://coderead.wordpress.com/2012/11/21/uploading-files-directly-to-blob-storage-from-the-browser/

http://gauravmantri.com/2013/02/16/uploading-large-files-in-windows-azure-blob-storage-using-shared-access-signature-html-and-javascript/

于 2013-07-29T10:43:41.663 に答える
0

この問題に有効な解決策を見つけました。私のアップロードは次のように機能するようになりました。

  • ファイルを DataURL として FileReader に読み込みます

  • 返された文字列をスライスし、各スライスをサーバーに送信してセッション変数に格納します

  • ファイル全体が送信されたら、別の Web サービスを呼び出します。この Web サービスは、スライスをつなぎ合わせて、結果をバイト配列に変換します。

  • バイト配列は、Azure のローカル ストレージにファイルとして保存されます。

  • 最後に、ファイルはローカル ストレージから BLOB ストレージに転送されます

次のコードを参照してください。

HTML から Azure にファイルをアップロードする

于 2013-08-06T08:38:49.650 に答える