Как я могу установить CORS в Azure BLOB Storage на портале?
У нас есть хранилище blob на Windows Azure.
http://mytest.blob.core.windows.net/forms
Я загрузил несколько файлов в хранилище с помощью CloudBerry. И я могу загрузить файлы с помощью браузеров.
Эти файлы представляют собой простые текстовые файлы, но с разными расширениями файлов.
Например,
http://mytest.blob.core.windows.net/forms/f001.etx
Я хочу загрузить файлы через jquery ($.get), однако он не удалось из-за CORS.
Как я могу настроить CORS в Azure BLOB Storage на портале?
И, должен ли я сделать что-то для CORS на стороне клиента тоже?
Ответы
Ответ 1
ОБНОВЛЕНИЕ:. Во время этого ответа у Azure Portal эта функция отсутствовала. Теперь это выглядит как . Ниже описывается способ сделать это до добавления пользовательского интерфейса.
Как я могу настроить CORS в Azure BLOB Storage на портале?
Если вы хотите, вы всегда можете программно программировать правила 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 (Disclosure - я создаю утилиту Cloud Portam).
Как только CORS настроен правильно, вы можете использовать код, упомянутый в ответе Рори, для загрузки файла из хранилища blob. Вам не нужно делать что-либо особенное на стороне клиента, как упоминалось Рори.
Ответ 2
Это можно сделать прямо сейчас на портале, к счастью. Если вы просто выберите учетную запись, вы увидите меню с различными параметрами, а CORS будет одним из них для каждой из служб Blob, File и т.д.
![введите описание изображения здесь]()
Ответ 3
Теперь вы можете легко установить/отредактировать/просмотреть правила CORS с помощью силовой оболочки azure. Дополнительную информацию можно найти по этой ссылке:
https://azure.microsoft.com/en-us/documentation/articles/storage-powershell-guide-full/
Чтобы суммировать следующие команды оболочки питания, вы установите CORS для своего блоба:
- Запустите
Add-AzureAccount
, чтобы войти в свою учетную запись
- Смотрите ваши подписки в лазурном
Get-AzureSubscription |
Format-Table SubscriptionName, IsDefault, IsCurrent,
CurrentStorageAccountName
- Установить желаемую подписку
$SubscriptionName = 'Your subscription
name'
- Проверьте желаемый blob
Get-AzureStorageBlob
- Теперь вам нужно создать контекст авторизации для вашего blob
$ctx =
New-AzureStorageContext
и ввести нужные параметры.
- Теперь вы готовы получить или установить правила CORS для своего блоба. Проверьте
действующие правила CORS
Get-AzureStorageCORSRule -ServiceType Blob
-Context $ctx
- Установить текущие правила CORS, например:
$CorsRules = (@{
[email protected]("*");
[email protected]("*");
[email protected]("content-length");
MaxAgeInSeconds=200;
[email protected]("Get","Connect", "Head")})
-
Set-AzureStorageCORSRule -ServiceType Blob -CorsRules $CorsRules
-Context $ctx
Ответ 4
Более тонкий способ установки CORS через PowerShell:
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 = (@{
[email protected]("*");
[email protected]("*");
[email protected]("content-length");
MaxAgeInSeconds=200;
[email protected]("Get","Connect", "Head")})
Set-AzureStorageCORSRule -ServiceType Blob -CorsRules $CorsRules -Context $Context
$CORSrule = Get-AzureStorageCORSRule -ServiceType Blob -Context $Context
echo "Current CORS rules: "
echo $CORSrule
Ответ 5
Чтобы убедиться, что ваша настройка B2C работает, вам нужно позаботиться о вещах ниже:
Совет. Чтобы убедиться, что сайт, на котором размещен ваш контент, включен CORS и проверяет запросы CORS, вы можете использовать сайт http://test-cors.org/. Благодаря этому сайту вы можете просто отправить запрос CORS на удаленный сервер (проверить, поддерживает ли CORS), или отправить запрос CORS на тестовый сервер (для изучения некоторых функций CORS).
Ссылка:
https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-customize-ui-custom
Ответ 6
Хранилище 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");
}
});
Ответ 7
Вот как я включил 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
});
}