Pokaż plik obrazu obiektu blob platformy Azure w przeglądarce i nie wymuszaj pobierania

Aug 16 2020

To pytanie zadawano już jakiś czas temu. Mam nadzieję, że dzisiaj odpowiedź jest inna.

  • 3 lata temu - pliki magazynu Azure wymuszają pobieranie do przeglądarki

Używam usługi Azure Blob Storage do zapisywania obrazów (jpg) dla witryny sieci Web. Łączę się bezpośrednio z plikami w moich <img>tagach i to działa świetnie (mam włączony dostęp anonimowy). Problem polega na tym, że jeśli użytkownik kliknie obraz (który prowadzi bezpośrednio do pliku) to jest zmuszony go pobrać i nie może go przeglądać w przeglądarce.

Czy istnieje sposób na ustawienie nagłówków magazynu obiektów blob, aby umożliwić przeglądanie go bezpośrednio w przeglądarce i nie wymuszanie pobierania.

Aktualizacja 1:

Na podstawie tego Jak mogę wyświetlić obraz z usługi Azure Blob Storage zamiast go pobierać? i tohttps://social.msdn.microsoft.com/Forums/windowsapps/en-US/b8759195-f490-420b-a587-2bb614366ad2/embedding-images-from-blob-storage-in-ssrs-report-does-not-work

Okazało się, że nie ustawiam typu zawartości, który jest przyczyną problemu. Muszę to ustawić "image/jpeg". Nie jestem jednak do końca pewien, jak to zrobić. To jest kod, którego używam do przechowywania obrazu.

using Microsoft.Azure.Storage.Blob

/// <summary>
/// Save a file to azure blob storage.
/// </summary>
/// <param name="name">Name of file</param>
/// <param name="file">filestream</param>
/// <param name="ct">Cancellationtoken</param>
public async Task<bool> SaveFile(Stream fileStream, string fileName, CancellationToken ct)
{
   CloudBlockBlob cloudBlockBlob = _blobContainer.GetBlockBlobReference(fileName);

   fileStream.Position = 0;
   await cloudBlockBlob.UploadFromStreamAsync(fileStream, ct);

   return true;
}

Nie znalazłem w tym przypadku żadnego typu właściwości „.Content” ani „Type”. Będzie kopać dalej.

Aktualizacja 2: być może znalazłem rozwiązanie:

cloudBlockBlob.Properties.ContentType = "image/jpg";

Testowanie

Aktualizacja 3: To wystarczyło. Używając tego do ustawiania odpowiednich typów treści dla obrazów i plików PDF, są one teraz widoczne w przeglądarce.

if (fileName.EndsWith(".jpg"))
{
    cloudBlockBlob.Properties.ContentType = "image/jpg";
}
else if (fileName.EndsWith(".pdf"))
{
    cloudBlockBlob.Properties.ContentType = "application/pdf";
}

Odpowiedzi

3 JensB Aug 16 2020 at 03:42

Zobacz pytanie, aby uzyskać szczegółowe informacje. Ale ustawienie typu zawartości można zrobić za pomocą:

cloudBlockBlob.Properties.ContentType = "image/jpg";