Windows Azureにblobストレージがあります。
http://mytest.blob.core.windows.net/forms
CloudBerryを使用してストレージにいくつかのファイルをアップロードしました。また、ブラウザでファイルを正常にダウンロードできます。これらのファイルは単純なテキストファイルですが、ファイル拡張子が異なります。例えば、
http://mytest.blob.core.windows.net/forms/f001.etx
Jquery($ .get)を使用してファイルをダウンロードしたいのですが、CORSが原因で失敗しました。
ポータルのAzure BLOBストレージでCORSを構成するにはどうすればよいですか?
また、クライアント側でもCORSに何かする必要がありますか?
UPDATE:この回答の時点では、Azureポータルにこの機能はありませんでした。 ここで概説 のようになりました。以下は、UIが追加される前にこれを行う方法の概要です。
ポータルのAzure BLOBストレージでCORSを構成するにはどうすればよいですか?
必要に応じて、ブロブストレージのCORSルールを常にプログラムで設定できます。 .Net Storage Clientライブラリを使用している場合は、ストレージチームからのこのブログ投稿を確認してください: http://blogs.msdn.com/b/windowsazurestorage/archive/2014/02/03/windows-Azure- storage-introducing-cors.aspx 。そのブログ投稿からCORS設定を設定するためのコード:
private static void InitializeCors()
{
// CORS should be enabled once at service startup
// Given a BlobClient, download the current Service Properties
ServiceProperties blobServiceProperties = BlobClient.GetServiceProperties();
ServiceProperties tableServiceProperties = TableClient.GetServiceProperties();
// Enable and Configure CORS
ConfigureCors(blobServiceProperties);
ConfigureCors(tableServiceProperties);
// Commit the CORS changes into the Service Properties
BlobClient.SetServiceProperties(blobServiceProperties);
TableClient.SetServiceProperties(tableServiceProperties);
}
private static void ConfigureCors(ServiceProperties serviceProperties)
{
serviceProperties.Cors = new CorsProperties();
serviceProperties.Cors.CorsRules.Add(new CorsRule()
{
AllowedHeaders = new List<string>() { "*" },
AllowedMethods = CorsHttpMethods.Put | CorsHttpMethods.Get | CorsHttpMethods.Head | CorsHttpMethods.Post,
AllowedOrigins = new List<string>() { "*" },
ExposedHeaders = new List<string>() { "*" },
MaxAgeInSeconds = 1800 // 30 minutes
});
}
同じことを行うツールを探している場合、いくつかのストレージエクスプローラーがCORSの構成をサポートしています-Azure Storage Explorer、Cerebrata Azure Management Studio、Cloud Portam(開示-私はCloud Portamユーティリティを構築しています)。
CORSが適切に構成されたら、Roryの回答に記載されているコードを使用して、BLOBストレージからファイルをダウンロードできます。 Roryが述べたように、クライアント側で特別なことをする必要はありません。
Azure Power Shellを使用してCORSルールを簡単に設定/編集/表示できるようになりました。このリンクの詳細については、以下をご覧ください。
https://Azure.Microsoft.com/en-us/documentation/articles/storage-powershell-guide-full/
以下のPower Shellコマンドを要約すると、BLOBのCORSが設定されます。
Add-AzureAccount
_を実行してアカウントにサインインしますGet-AzureSubscription | Format-Table SubscriptionName, IsDefault, IsCurrent, CurrentStorageAccountName
_$SubscriptionName = 'Your subscription name'
_Get-AzureStorageBlob
_$ctx = New-AzureStorageContext
_の認証コンテキストを作成し、必要なパラメーターを入力する必要があります。Get-AzureStorageCORSRule -ServiceType Blob -Context $ctx
_$CorsRules = (@{ AllowedHeaders=@("*"); AllowedOrigins=@("*"); ExposedHeaders=@("content-length"); MaxAgeInSeconds=200; AllowedMethods=@("Get","Connect", "Head")})
Set-AzureStorageCORSRule -ServiceType Blob -CorsRules $CorsRules -Context $ctx
_PowerShellを介してCORSを設定するより簡潔な方法: https://Gist.github.com/irwinwilliams/4cf93b6e2461c753ff125590650186ae
#works with Azure in Powershell v 1.3.2
clear
$StorageAccountName = "[storageaccountname]"
$Key = "[storageaccountkey]"
$Context = New-AzureStorageContext -StorageAccountKey $Key -StorageAccountName $StorageAccountName
$CorsRules = (@{
AllowedHeaders=@("*");
AllowedOrigins=@("*");
ExposedHeaders=@("content-length");
MaxAgeInSeconds=200;
AllowedMethods=@("Get","Connect", "Head")})
Set-AzureStorageCORSRule -ServiceType Blob -CorsRules $CorsRules -Context $Context
$CORSrule = Get-AzureStorageCORSRule -ServiceType Blob -Context $Context
echo "Current CORS rules: "
echo $CORSrule
これは、コンソールアプリケーションでcorsを有効にする方法です。StorageCredentials内に資格情報を指定するだけです。
private static CloudStorageAccount StorageAccount;
public static CloudBlobClient BlobClient
{
get;
private set;
}
static void Main(string[] args)
{
StorageAccount = new CloudStorageAccount(new StorageCredentials("AccountName", "AccountKey"), true);
BlobClient = StorageAccount.CreateCloudBlobClient();
InitializeCors(BlobClient);
}
private static void InitializeCors(CloudBlobClient blobClient)
{
ServiceProperties blobServiceProperties = BlobClient.GetServiceProperties();
ConfigureCors(blobServiceProperties);
BlobClient.SetServiceProperties(blobServiceProperties);
}
private static void ConfigureCors(ServiceProperties serviceProperties)
{
serviceProperties.Cors = new CorsProperties();
serviceProperties.Cors.CorsRules.Add(new CorsRule()
{
AllowedHeaders = new List<string>() { "*" },
AllowedMethods = CorsHttpMethods.Put | CorsHttpMethods.Get | CorsHttpMethods.Head | CorsHttpMethods.Post,
AllowedOrigins = new List<string>() { "*" },
ExposedHeaders = new List<string>() { "*" },
MaxAgeInSeconds = 1800 // 30 minutes
});
}
B2Cのカスタマイズを確実に機能させるには、以下のことに注意する必要があります。
ヒント:コンテンツをホストしているサイトでCORSが有効になっていることを確認し、CORSリクエストをテストするには、サイト http://test-cors.org/ を使用できます。このサイトのおかげで、CORS要求をリモートサーバーに送信する(CORSがサポートされているかどうかをテストする)か、CORS要求をテストサーバーに送信する(CORSの特定の機能を調べる)ことができます。
Azure BlobストレージはCORSをサポートしていますが、リクエストを行う前にヘッダーを設定する必要があります。これを行うには、送信される情報をより詳細に制御できるため、$.ajax
を使用することをお勧めします。 このデモ の作り直しの例を次に示します。
function setHeader(xhr) {
xhr.setRequestHeader('x-ms-version', '2013-08-15');
xhr.setRequestHeader('MaxDataServiceVersion', '3.0');
xhr.setRequestHeader('Accept', 'application/json;odata=nometadata');
}
$.ajax({
type: 'GET',
datatype: "json",
url: 'http://mytest.blob.core.windows.net/forms/f001.etx',
beforeSend: setHeader,
success: function(data) {
// do something with the retrieved file.
},
error: function (res, status, xhr) {
alert("can't get the data for the specified table");
}
});