Azure Blob всегда загружается при навигации по URL-адресу
В нашем приложении мы даем пользователю возможность загрузить документ на учетную запись azure blob storage. После загрузки документа или изображения ему присваивается некоторый url (https://name.blob.core.windows.net/container/file-name.jpg). Если документ представляет собой изображение или PDF файл или какой-либо файл, который может быть отображен браузером, мы пытаемся отобразить его в браузере, не требуя от пользователя загрузки файла. Если мы просто открываем новое окно или вкладку и направляем пользователя на blob uri в IE, изображение или pdf правильно отображаются в браузере. Но, если мы попытаемся просто открыть новое окно, указывающее на uri в Chrome, FireFox или Safari, оно просто загружает файл, а не отображает его в браузере.
Есть ли способ заставить последние три браузера просто отображать файл, а не загружать его?
Ответы
Ответ 1
Это связано с тем, что вы не установили свойство типа содержимого для blob (по умолчанию это приложение/октет-поток, который запускает загрузку в большинстве браузеров), Если вы хотите, чтобы файлы PDF отображались правильно, вам нужно будет изменить тип содержимого ваших файлов PDF на приложение /pdf (изображение/jpeg для jpeg файлов).
Вы можете изменить тип контента с помощью обычных инструментов, таких как Azure Storage Explorer, Cloud Storage Studio, CloudBerry, CloudXplorer,... или с помощью SDK. Обратите внимание, что некоторые из этих инструментов автоматически устанавливают тип содержимого вправо после загрузки файла.
Ответ 2
blob.Properties.ContentType = "application/pdf";
//Получить тип содержимого файла по расширению
public static string GetFileContentType(string FilePath)
{
string ContentType = String.Empty;
string Extension = Path.GetExtension(FilePath).ToLower();
switch (Extension)
{
case ConstantUtility.FILE_EXTENSION_PDF:
ContentType = "application/pdf";
break;
case ConstantUtility.FILE_EXTENSION_TXT:
ContentType = "text/plain";
break;
case ConstantUtility.FILE_EXTENSION_BMP:
ContentType = "image/bmp";
break;
case ConstantUtility.FILE_EXTENSION_GIF:
ContentType = "image/gif";
break;
case ConstantUtility.FILE_EXTENSION_PNG:
ContentType = "image/png";
break;
case ConstantUtility.FILE_EXTENSION_JPG:
ContentType = "image/jpeg";
break;
case ConstantUtility.FILE_EXTENSION_JPEG:
ContentType = "image/jpeg";
break;
case ConstantUtility.FILE_EXTENSION_XLS:
ContentType = "application/vnd.ms-excel";
break;
case ConstantUtility.FILE_EXTENSION_XLSX:
ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
break;
case ConstantUtility.FILE_EXTENSION_CSV:
ContentType = "text/csv";
break;
case ConstantUtility.FILE_EXTENSION_HTML:
ContentType = "text/html";
break;
case ConstantUtility.FILE_EXTENSION_XML:
ContentType = "text/xml";
break;
case ConstantUtility.FILE_EXTENSION_ZIP:
ContentType = "application/zip";
break;
default:
ContentType = "application/octet-stream";
break;
}
return ContentType;
}
Используйте это, чтобы установить тип содержимого капли при сохранении.
Установить Content-типа мультимедийных файлов, хранящихся в Blob
Ответ 3
Для загрузки файлов через PowerShell используйте синтаксис ниже, чтобы установить тип содержимого во время загрузки.
Set-AzureStorageBlobContent -File <localFilePath> -Container <containerName> -Properties @{"ContentType"="text/plain"} -Context $ctx
Выше я установил тип содержимого blob в text/plain, полезный при загрузке JSON и HTML файлов, которые будут использоваться с шаблонами. Список значений заголовков содержимого здесь.