動的に生成された SAS を使用して、ユーザーがリソースを BLOB ストレージにアップロードできるようにする MVC アプリケーションがあります。ユーザーはファイルを選択し、アップロードをクリックします。アップロードをクリックすると、コントローラー アクションに ajax 呼び出しが送信され、コンテナーの SAS が生成され、署名が追加されてアップロードされる BLOB の URI である文字列が返されます。これは完全に機能し、SAS で正しい URI を返します。次に、返された URI を使用してファイルから Azure Blob Storage にデータを PUT する別の ajax 呼び出しがあります。これを実行すると、Jquery.min ファイルで「0x80070005 アクセスが拒否されました」という JavaScript ランタイム エラーが発生します。
これを正しくコーディングしたことと、SAS が正しいことを確認したかったので、Runscope を介して実行しました (Runscope アカウントを通過するように MVC コントローラー アクションで URI を変更しました)。URI をコピーし、ajax 呼び出しで設定しているヘッダーを手動で設定すると、うまくいきました。そして、許可設定が機能します。生成した SAS を使用するとファイルにアクセスできますが、SAS がないとアクセスできません。ajax 呼び出しを使用して JavaScript ファイルを実行すると、失敗して 405 エラーが返されました。これが私の ajax 呼び出しで、次に Runscope で送信された 2 つの異なる要求です。
この記事を使用しました http://gauravmantri.com/2013/02/16/uploading-large-files-in-windows-azure-blob-storage-using-shared-access-signature-html-and-javascript/#comment ファイルをチャンクでアップロードするためのガイドとして-1700 。次の ajax 呼び出しは、アップロードされたブロックごとに実行されますが、最初の試行で失敗します。
var uri = submitUri + "&comp=block&blockid=" + blockIds[blockIds.length - 1];
var requestData = new Uint8Array(evt.target.result);
$.ajax({
url: uri,
type: "PUT",
data: requestData,
processData: false,
beforeSend: function(xhr) {
xhr.setRequestHeader("x-ms-blob-type", "BlockBlob");
xhr.setRequestHeader("Content-Length", requestData.length);
},
success: function() {
// successful stuff here
uploadFileInBlocks();
}
error: function (xhr, desc, err) {
// error stuff here
}
});
そして、これが私のRunscopeの結果です:
成功した手動リクエスト:
PUT https://<myaccount>.blob.core.windows.net/trainingcourseresources/1002/georgewashington.jpg?sr=c&sp=rw&sig=GI+HN1hTEiyTG9Kz1OIBIcArAEkeZWyxI4v7OmMuEsA=&sv=2012-02-12&se=2013-09-17T13:19:52Z
HEADERS
Accept: */*
Accept-Encoding: gzip, deflate, compress
Connection: close
Host: atlastestblob.blob.core.windows.net
User-Agent: runscope/0.1
X-Ms-Blob-Type: BlockBlob
QUERYSTRING
se: 2013-09-17T13:19:52Z
sig: GI+HN1hTEiyTG9Kz1OIBIcArAEkeZWyxI4v7OmMuEsA=
sp: rw
sr: c
sv: 2012-02-12
Response: 201 Created
失敗した ajax リクエスト:
OPTIONS https://<myaccount>.blob.core.windows.net/trainingcourseresources/1002/cslewis.jpg?sp=rw&sr=c&blockid=YmxvY2stMDAwMDAw&sv=2012-02-12&sig=iIn/AL3eBBFlZdYoT717SMS9iDOY5PEKIdIufOle7NA=&comp=block&se=2013-09-17T13:40:00Z
HEADERS
Accept: */*
Accept-Encoding: gzip, deflate
Access-Control-Request-Headers: content-type, accept, x-ms-blob-type
Access-Control-Request-Method: PUT
Cache-Control: no-cache
Connection: close
Dnt: 1
Host: atlastestblob.blob.core.windows.net
Origin: https://localhost:44308
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
QUERYSTRING
blockid: YmxvY2stMDAwMDAw
comp: block
se: 2013-09-17T13:40:00Z
sig: iIn/AL3eBBFlZdYoT717SMS9iDOY5PEKIdIufOle7NA=
sp: rw
sr: c
sv: 2012-02-12
Response: 405 The resource doesn't support specified Http Verb