2012-08-04 16 views
16

Nella nostra applicazione diamo all'utente la possibilità di caricare un documento su un account di archiviazione BLOB di Windows Azure. Dopo aver caricato il documento o l'immagine viene assegnato un URL (https://name.blob.core.windows.net/container/file-name.jpg). Se il documento è un'immagine o un pdf o un file che può essere visualizzato dal browser, stiamo cercando di visualizzarlo nel browser senza richiedere all'utente di scaricare il file. Se apriamo solo una nuova finestra o scheda e indirizziamo l'utente al blob uri in IE, l'immagine o il pdf vengono visualizzati correttamente nel browser. Ma, se proviamo ad aprire una nuova finestra che punta a uri in Chrome, FireFox o Safari, scarica semplicemente il file anziché visualizzarlo nel browser.Azure Blob viene sempre scaricato durante la navigazione nell'url

C'è un modo per forzare gli ultimi tre browser a visualizzare solo il file invece di scaricarlo?

risposta

30

Questo perché non è stata impostata la proprietà content type del blob (l'impostazione predefinita è application/octet-stream, che attiva un download nella maggior parte dei browser). Se si desidera visualizzare correttamente i file PDF, è necessario modificare il tipo di contenuto dei file PDF in application/pdf (image/jpeg per i file jpeg).

È possibile modificare il tipo di contenuto con strumenti comuni come Azure Storage Explorer, Cloud Storage Studio, CloudBerry, CloudXplorer, ... o utilizzando l'SDK. Tieni presente che alcuni di questi strumenti imposteranno automaticamente il tipo di contenuto su quello giusto dopo aver caricato il file.

+1

L'url non è più valida è – spuder

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

// Prendi il tipo di contenuto del file per estensione

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

Consente di impostare il tipo di contenuto del blob, mentre il risparmio di esso.

Set Content-type of media files stored on Blob

+2

se si utilizza HttpPostedFileBase, già contiene contenuti tipo attr es: '' blockBlob.Properties.ContentType = httpPostedFileBase.ContentType; '' – user1686407

+1

che ha funzionato alla perfezione; Alla fine ho deciso di stabilire automaticamente il tipo di mime per il mio file: 'blob.Properties.ContentType = MimeMapping.GetMimeMapping (path);' –

0

Per coloro caricamento dei file tramite PowerShell, utilizzare la sintassi di seguito per impostare il tipo di contenuto durante il caricamento.

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

Sopra ho impostato il tipo di contenuto blob di testo/plain, utile durante il caricamento di file HTML che verranno utilizzati con i modelli JSON e. Elenco di più valori di intestazione tipi di contenuto here.

Problemi correlati