2012-08-04 10 views
16

In unserer Anwendung geben wir dem Benutzer die Möglichkeit, ein Dokument auf ein Windows Azure Blob Speicherkonto hochzuladen. Nach dem Hochladen des Dokuments oder Bildes wird ihm eine URL zugewiesen (https://name.blob.core.windows.net/container/file-name.jpg). Wenn das Dokument ein Bild oder eine PDF-Datei oder eine Datei ist, die vom Browser gerendert werden kann, versuchen wir, sie im Browser anzuzeigen, ohne dass der Benutzer die Datei herunterladen muss. Wenn wir nur ein neues Fenster oder eine neue Registerkarte öffnen und den Benutzer auf das Blob-URI in IE verweisen, wird das Bild oder die PDF-Datei korrekt im Browser gerendert. Wenn wir jedoch versuchen, in Chrome, FireFox oder Safari ein neues Fenster zu öffnen, das auf die URL verweist, wird die Datei heruntergeladen und nicht im Browser angezeigt.Azure Blob wird immer heruntergeladen, wenn zur URL navigiert wird

Gibt es eine Möglichkeit, die letzten drei Browser zu zwingen, die Datei nur anzuzeigen, anstatt sie herunterzuladen?

Antwort

30

Dies liegt daran, dass Sie die content type Eigenschaft des Blobs nicht gesetzt haben (der Standard ist application/octet-stream, der in den meisten Browsern einen Download auslöst). Wenn PDF-Dateien korrekt angezeigt werden sollen, müssen Sie den Inhaltstyp Ihrer PDF-Dateien in application/pdf (image/jpeg für JPEG-Dateien) ändern.

Sie können den Inhaltstyp mit gängigen Tools wie Azure Storage Explorer, Cloud Storage Studio, CloudBerry, CloudXplorer, ... oder mit dem SDK ändern. Beachten Sie, dass einige dieser Tools den Inhaltstyp nach dem Hochladen der Datei automatisch auf den richtigen Wert setzen.

+1

Die URL ist nicht mehr gültig, wenn Sie – spuder

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

// Finden Sie den Inhaltstyp der Datei durch Erweiterung

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

verwenden den Inhaltstyp des Blobs zu setzen, während sie zu speichern.

Set Content-type of media files stored on Blob

+2

HttpPostedFileBase verwenden, bereits es Inhaltstyp attr ex enthalten: '' blockBlob.Properties.ContentType = httpPostedFileBase.ContentType; '' – user1686407

+1

, die perfekt gearbeitet; Ich entschied mich schließlich dafür, den Mime-Typ für meine Datei automatisch zu bestimmen: 'blob.Properties.ContentType = MimeMapping.GetMimeMapping (Pfad);' –

0

Für diejenigen Dateien per Powershell-Upload, verwenden Sie die folgende Syntax Inhaltstyp beim Upload einzustellen.

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

Above ich den Blob Inhaltstyp text/plain, nützlich, wenn das Hochladen von JSON und HTML-Dateien, die mit Vorlagen verwendet werden. Liste weiterer Inhaltstypen Kopfzeilenwerte here.

Verwandte Themen