Afficher le fichier image Azure blob dans le navigateur et ne pas forcer le téléchargement

Aug 16 2020

Cette question a déjà été posée il y a peu de temps. J'espère que la réponse est différente aujourd'hui.

  • Il y a 3 ans - Les fichiers de stockage Azure forcent le téléchargement vers le navigateur

J'utilise Azure Blob Storage pour enregistrer des images (jpg) pour un site Web. Je crée un lien direct vers les fichiers dans mes <img>balises et cela fonctionne très bien (j'ai activé l'accès anonyme). Le problème est que si l'utilisateur clique sur l'image (qui renvoie directement au fichier), il est obligé de la télécharger et ne peut pas la visualiser dans le navigateur.

Existe-t-il un moyen de définir les en-têtes du stockage blob pour permettre de le visualiser directement dans le navigateur et de ne pas forcer un téléchargement.

Mise à jour 1 :

Basé sur ceci Comment puis-je afficher une image à partir d'Azure Blob Storage, plutôt que de la télécharger ? et çahttps://social.msdn.microsoft.com/Forums/windowsapps/en-US/b8759195-f490-420b-a587-2bb614366ad2/embedding-images-from-blob-storage-in-ssrs-report-does-not-work

J'ai constaté que je ne définissais pas le type de contenu, ce qui est à l'origine du problème. Je dois le régler sur "image/jpeg". Je ne sais pas trop comment faire cela cependant. C'est le code que j'utilise pour stocker l'image.

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;
}

Je n'ai trouvé aucun type de propriété ".Content" ou "Type" à ce sujet. Continuera à creuser.

Mise à jour 2 : a peut-être trouvé la solution :

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

Essai

Mise à jour 3 : Cela l'a fait. Utilisez ceci pour définir les types de contenu appropriés pour les images et les pdf et ils sont maintenant visibles dans le navigateur.

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

Réponses

3 JensB Aug 16 2020 at 03:42

Voir la question pour plus de détails. Mais la définition du type de contenu peut être effectuée avec :

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