2012-08-04 28 views
16

En nuestra aplicación le damos al usuario la capacidad de cargar un documento en una cuenta de almacenamiento de blobs azure de Windows. Después de cargar el documento o la imagen, se le asigna una URL (https://name.blob.core.windows.net/container/file-name.jpg). Si el documento es una imagen o un pdf o algún archivo que puede ser renderizado por el navegador, estamos tratando de mostrarlo en el navegador sin requerir que el usuario descargue el archivo. Si solo abrimos una nueva ventana o pestaña y dirigimos al usuario al blob uri en IE, la imagen o el PDF se renderizan correctamente en el navegador. Pero, si intentamos abrir una nueva ventana apuntando a la uri en Chrome, FireFox o Safari, simplemente descarga el archivo en lugar de mostrarlo en el navegador.Azure Blob siempre se descarga al navegar por la url

¿Hay alguna manera de forzar a los últimos tres navegadores a que solo muestren el archivo en lugar de descargarlo?

Respuesta

30

Esto se debe a que no estableció la propiedad content type del blob (el valor predeterminado es application/octet-stream, que desencadena una descarga en la mayoría de los navegadores). Si desea que los archivos PDF se muestren correctamente, deberá cambiar el tipo de contenido de sus archivos PDF a application/pdf (image/jpeg for jpeg files).

Puede cambiar el tipo de contenido con herramientas comunes como Azure Storage Explorer, Cloud Storage Studio, CloudBerry, CloudXplorer, ... o mediante el SDK. Tenga en cuenta que algunas de estas herramientas establecerán automáticamente el tipo de contenido en el correcto luego de cargar el archivo.

+1

La dirección de Internet ya no es válida si se utiliza – spuder

19
blob.Properties.ContentType = "application/pdf"; 

// Obtener el tipo de contenido del archivo por extensión

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

Use esto para establecer el tipo de contenido de la burbuja mientras se guarda.

Set Content-type of media files stored on Blob

+2

HttpPostedFileBase, que ya contiene contenido tipo attr por ejemplo: '' blockBlob.Properties.ContentType = httpPostedFileBase.ContentType; '' – user1686407

+1

Eso funcionó a la perfección; Terminé quedándome con esto para determinar automáticamente el tipo de mime para mi archivo: 'blob.Properties.ContentType = MimeMapping.GetMimeMapping (ruta);' –

0

Para aquellos de subir archivos a través de PowerShell, utilice la sintaxis siguiente para establecer el tipo de contenido durante la carga.

Set-AzureStorageBlobContent -File <localFilePath> -Container <containerName> -Properties @{"ContentType"="text/plain"} -Context $ctx 

Sobre fijo el tipo de contenido a gota text/plain, útil cuando la carga de archivos HTML que se utilizarán con plantillas JSON y. Lista de más valores de encabezado de tipos de contenido here.

Cuestiones relacionadas