Изображения хранилища BLOB-объектов - Azure
У меня есть некоторые проблемы с изображениями, которые я загружаю через мой веб-API в общедоступный контейнер в моем хранилище BLOB-объектов. Проблема в том, что мне нужно, чтобы изображение, которое я загружал через API, должно быть доступно для просмотра. Я имею в виду, что, когда вы размещаете публичную ссылку в браузере, вы можете видеть изображение в браузере, но на самом деле, когда я помещаю ссылку, изображение сделать загрузку изображения и не показывать мне ничего в браузере. Но когда я загружаю изображение через портал Azure, я могу видеть изображение так, как я хочу... У меня открыт контейнер, и я не знаю, что еще делать.... мой код для загрузки изображения:
private readonly CloudBlobContainer blobContainer;
public UploadBlobController()
{
var storageConnectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
var storageAccount = CloudStorageAccount.Parse(storageConnectionString);
var blobClient = storageAccount.CreateCloudBlobClient();
blobContainer = blobClient.GetContainerReference("messagesthredimages");
blobContainer.CreateIfNotExists();
blobContainer.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
}
[HttpPost]
[Route("UploadImagetoBlob")]
public async Task<IHttpActionResult> UploadImagetoBlob()//string imagePath
{
try
{
var image = WebImage.GetImageFromRequest();
var imageBytes = image.GetBytes();
var blockBlob = blobContainer.GetBlockBlobReference(image.FileName);
blockBlob.Properties.ContentType = "messagesthreadimages/" + image.ImageFormat;
await blockBlob.UploadFromByteArrayAsync(imageBytes, 0, imageBytes.Length);
return Ok(blockBlob.Uri.ToString());
}
catch (Exception)
{
return BadRequest();
}
}
Примеры, я надеюсь, что кто-нибудь может помочь мне с этим.
Что я хочу => Исправить
Что я не хочу => Неправильно
2 ответа
Я сталкивался с той же проблемой раньше. Браузеры загружают файл, когда не знают формат (тип файла). Если вы отслеживаете файлы с помощью приложения для настольного компьютера (не знаете, где находится эта опция на портале), вы найдете типы файлов.
Эти типы файлов устанавливаются на основе blockBlob.Properties.ContentType
вы настраиваете Вам нужно осмотреть и проверить, что именно image.ImageFormat
возвращается. Браузер будет отображать изображение, только если для этого значения установлено что-то вроде "image/jpeg"
, Однако, так как вы используете "messagesthreadimages/" + image.ImageFormat
это может быть что-то вроде "messagesthreadimages/image/jpeg"
,
Как сказал Невилл, у вас есть неправильное понимание, когда вы вызываете метод SetProperties, такой как blockBlob.Properties.ContentType.
Content-Type указывает тип мультимедиа содержимого сообщения.
Тип содержимого изображения позволяет включать в сообщения стандартизированные файлы изображений. Для более подробной информации, вы можете обратиться к этой ссылке.
image/g3fax [RFC1494]
image/gif [RFC1521]
image/ief (Image Exchange Format) [RFC1314]
image/jpeg [RFC1521]
image/tiff (Tag Image File Format) [RFC2301]
Я прочитал эту статью, и кажется, что вы бы настроить ContentType изображения. Итак, вы можете изменить код, как показано ниже:
blockBlob.Properties.ContentType = "image/" + image.ImageFormat;