アップロードするファイルが非常に大きい(500MB-1GB +)ため、ブラウザから直接SASキーを使用してアップロードしようとしています。 Azureでホストされているバックエンドを通過する。クライアントから直接SASキーを使用してAzureストレージにアップロード
私はthis great post hereに従っていますが、私はCORSの問題を手にして、403エラーを他方に当てます。
CORSエラー
いいえ「アクセス制御 - 許可原点」ヘッダが要求 資源上に存在します。したがって、オリジン 'http://localhost:36923'は許可されません。 応答はHTTPステータスコード403を持っていました。
ご覧のとおり、テスト用に私のASP MVCアプリケーションをローカルで実行してAzureにアップロードしようとしています。
と403エラーが受信:403サーバーは、要求の認証に失敗しました。署名を含めて Authorizationヘッダーの値が正しく形成されていることを確認してください。
私は(来年期限切れになると書き込みアクセス権を持つ)私のSAS URIを生成した方法は以下の通りです:
// First I create the blob container
public static CloudBlockBlob CreateBlobContainer(string strContainer)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"].ToString());
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(strContainer);
container.CreateIfNotExists();
CloudBlockBlob blockBlob = new CloudBlockBlob(container.Uri, new StorageCredentials(ConfigurationManager.AppSettings["AccountName"], ConfigurationManager.AppSettings["AccountKey"]));
return blockBlob;
}
//Then I create a SAS key for that container
public static string GetSaSForBlobContainer(CloudBlockBlob blob, SharedAccessBlobPermissions permission)
var sas = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
Permissions = permission,
SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),
SharedAccessExpiryTime = DateTime.UtcNow.AddYears(1),
});
return string.Format(CultureInfo.InvariantCulture, "{0}{1}", blob.Uri, sas);
}
//Above methods invoked as such
container = FileManager.CreateBlobContainer("supercontainer");
var sasUri = FileManager.GetSaSForBlobContainer(container, SharedAccessBlobPermissions.Write);
だから、私はそれにアップロードすることができますURIを生成し、コンテナを作成します年以上
上記のsasUri
は、JavaScriptのロジックにアクセス可能なASP MVCビューで公開されています。それは上記のブログ投稿のbaseUrl
です。
は、ここに私のコンテナに設定CORSです:
は、なぜ私はこのCORSのエラーが出るのでしょうか?また、なぜ約Authorityヘッダーについてのエラー?
SAS URIを使用するという考えは、アカウント名/キーをクライアントに公開する必要がないと考えました。
何か不足していますか?
そのブログの投稿と同じ男:)。 BLOBコンテナまたはBLOBにSASを作成していますか?あなたのコードから、それはあなたが容器ではなく、ブロブでそれをやっているようです。あなたが質問に含めなかったコードがいくつかありますか?もしそうなら、それを質問に含めてください。 –
@ GauravMantri私は両方のC#メソッドをどのように呼び出すかを示す部分を編集しました。私はコンテナレベルでSAS発電をやっていると思うかもしれませんが、私の目は私をだましているかもしれません... –
ありがとう!問題は、コンテナのURIを名前としてブロックBLOBを作成しているということです。したがって、あなたのBLOBの名前は 'https:// youraccount.blob.core.windows.net/supercontainer'です。 'CreateBlobContainer'がblobの代わりにコンテナオブジェクトを返し、' GetSaSForBlobContainer'の第1パラメータが 'CloudBlockBlob'の代わりに' CloudBlobContainer'の型になるようにSASを作成してください。試してみてください。 –