wake-up-neo.com

Hochladen eines Blockblobs und Festlegen des Inhaltstyps

Ich verwende die Microsoft.WindowsAzure.Storage.* Bibliothek von C #.

So lade ich Dinge in den Speicher hoch:

// Store in storage
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("...connection string...");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("pictures");

// Create container if it doesnt exist
container.CreateIfNotExists();

// Make available to everyone
container.SetPermissions(new BlobContainerPermissions
{
    PublicAccess = BlobContainerPublicAccessType.Blob
});

// Save image
CloudBlockBlob blockBlob = container.GetBlockBlobReference("blah.jpg");
blockBlob.UploadFromByteArray(byteArrayThumbnail, 0, byteArrayThumbnail.Length);
blockBlob.Properties.ContentType = "image/jpg";  // *** NOT WORKING ***

Alle Dinge, die ich in den Speicher hochlade, werden mit dem Inhaltstyp "application/octet-stream" gespeichert, obwohl ich den Setter mit dem Wert "image/jpg" verwende (siehe die letzte Zeile in meinem Code).

Frage 1: Warum funktioniert der ContentType-Setter nicht?

Und Frage 2: Wenn ich den Inhaltstyp mithilfe des Windows Azure-Verwaltungsportals manuell in "image/jpg" ändere und dann den absoluten URI der Datei in das Adressfeld des Browsers kopiere und die Eingabetaste drücke, wird stattdessen die jpg-Datei heruntergeladen von angezeigt. Soll dieser MIME-Typ nicht angezeigt und nicht heruntergeladen werden? Wie ändere ich das?

11
sports

Eigentlich müssen Sie die SetProperties-Methode nicht aufrufen. Um den Inhaltstyp beim Hochladen des Blobs festzulegen, setzen Sie einfach die Eigenschaft ContentType, bevor Sie die Upload-Methode aufrufen. Ihr Code sollte also sein:

// Save image
CloudBlockBlob blockBlob = container.GetBlockBlobReference("blah.jpg");
blockBlob.Properties.ContentType = "image/jpg";
blockBlob.UploadFromByteArray(byteArrayThumbnail, 0, byteArrayThumbnail.Length);

und das sollte den Trick machen.

69
Gaurav Mantri

Nachdem Sie Änderungen an Properties vorgenommen haben, müssen Sie CloudBlockBlob.SetProperties () aufrufen, um diese Änderungen tatsächlich zu speichern.

Stellen Sie es sich ähnlich wie LINQ-to-Entities vor. Sie können alle gewünschten Änderungen an Ihrem lokalen Objekt vornehmen, aber bis Sie SaveChanges() aufrufen, wird nichts gespeichert.

20
Nathan A

mit der neuen Version des Azure Blob SDK funktioniert dies nicht mehr.

das hat bei mir geklappt:

CloudBlockBlob blockBlob = cloudBlobContainer.GetBlockBlobReference(blobName);
blockBlob.Properties.ContentType = contentType;                            
await blockBlob.SetPropertiesAsync();
0
aumanjoa