it-swarm.com.ru

Загрузка blockblob и настройка типа контента

Я использую библиотеку Microsoft.WindowsAzure.Storage.* из C #.

Вот как я загружаю вещи в хранилище:

// Store in storage
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("...connection string...");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("pictures");

// Create container if it doesnt exist
container.CreateIfNotExists();

// Make available to everyone
container.SetPermissions(new BlobContainerPermissions
{
    PublicAccess = BlobContainerPublicAccessType.Blob
});

// Save image
CloudBlockBlob blockBlob = container.GetBlockBlobReference("blah.jpg");
blockBlob.UploadFromByteArray(byteArrayThumbnail, 0, byteArrayThumbnail.Length);
blockBlob.Properties.ContentType = "image/jpg";  // *** NOT WORKING ***

Все вещи, которые я загружаю в хранилище, сохраняются с типом контента «application/octet-stream», хотя я использую сеттер со значением «image/jpg» (см. Последнюю строку в моем коде).

Итак, вопрос № 1. Почему не работает установщик ContentType?

И вопрос № 2. Если я вручную изменю тип контента на «image/jpg», используя портал управления Windows Azure, а затем скопирую абсолютный URI файла в поле адреса браузера и нажимаю ввод, вместо этого загружается файл jpg из отображается. Разве этот тип пантомимы не должен отображаться вместо загруженного? Как мне это изменить?

11
sports

На самом деле вам не нужно вызывать метод SetProperties. Чтобы установить тип содержимого при загрузке большого двоичного объекта, просто установите свойство ContentType перед вызовом метода загрузки. Итак, ваш код должен быть:

// Save image
CloudBlockBlob blockBlob = container.GetBlockBlobReference("blah.jpg");
blockBlob.Properties.ContentType = "image/jpg";
blockBlob.UploadFromByteArray(byteArrayThumbnail, 0, byteArrayThumbnail.Length);

и это должно сработать.

69
Gaurav Mantri

После того, как вы внесете какие-либо изменения в Properties, вы должны позвонить в CloudBlockBlob.SetProperties () , чтобы фактически сохранить эти изменения.

Думайте об этом как о чем-то похожем на LINQ-to-Entities. Вы можете вносить любые изменения в свой локальный объект, но до тех пор, пока вы не вызовете SaveChanges(), на самом деле ничего не сохраняется.

20
Nathan A

с новой версией Azure Blob SDK это больше не работает. 

это сработало для меня:

CloudBlockBlob blockBlob = cloudBlobContainer.GetBlockBlobReference(blobName);
blockBlob.Properties.ContentType = contentType;                            
await blockBlob.SetPropertiesAsync();
0
aumanjoa