2012-04-06 8 views
47

Wir haben eine auf Azure gehostete Website. Es basiert auf Medien und wir verwenden JWPlayer, um Medien mit HTTP-Pseudostreaming abzuspielen. Die Mediendateien werden auf Blob in 3 Formaten gespeichert - mp4, ogg, webm.Festlegen des Inhaltstyps der auf Blob gespeicherten Mediendateien

Das Problem ist der Inhaltstyp der Mediendateien ist als Anwendung/Oktett-Stream für alle Typen festgelegt. Aus diesem Grund gibt es einige Probleme in der Medienwiedergabe und Fortschrittsbalken.

Wie kann ich den geeigneten Inhalt-Typ von Dateien auf Blob (wie - Video/MP4, Video/OGG, Video/WebM) gespeichert?

Ich möchte es nicht manuell für jede Datei tun, indem Sie in Blob-Schnittstelle gehen. Es muss einen anderen Weg geben, den ich nicht kenne. Vielleicht eine Konfigurationsdatei, Einstellungsdatei, etc sortiert. Oder vielleicht einen Codeblock, um den Inhaltstyp für alle in einem Ordner gespeicherten Dateien einzurichten.

Irgendwelche Vorschläge? Dank

Antwort

87

Dies sollte funktionieren:

var storageAccount = CloudStorageAccount.Parse("YOURCONNECTIONSTRING"); 
var blobClient = storageAccount.CreateCloudBlobClient(); 

var blobs = blobClient 
    .GetContainerReference("thecontainer") 
    .ListBlobs(useFlatBlobListing: true) 
    .OfType<CloudBlockBlob>(); 

foreach (var blob in blobs) 
{ 
    if (Path.GetExtension(blob.Uri.AbsoluteUri) == ".mp4") 
    { 
     blob.Properties.ContentType = "video/mp4"; 
    } 
    // repeat ad nauseam 
    blob.SetProperties(); 
} 

Oder ein Wörterbuch aufgebaut, so dass Sie nicht eine Reihe von if-Anweisungen zu schreiben.

+0

Dank Smarx für Ihre Hilfe. –

+1

@smarx: Ist es auch möglich, das gleiche in CDN zu tun, http://stackoverflow.com/questions/21847663/changing-video-content-type-mime-type-in-cdn-in-drupal-7 – Hitesh

+1

Gibt es keine Möglichkeit, dies direkt im Azure Portal einzurichten? Ohne Codierung – batmaci

8

Dies ist Arbeit Beispiel Video zu Azure Blob Storage mit rechten Content-Type hochladen:

public static String uploadFile(
    CloudBlobContainer container,String blobname, String fpath) { 

    CloudBlockBlob blob; 
    try { 
     blob = container.getBlockBlobReference(blobname); 
     File source = new File(fpath); 

     if (blobname.endsWith(".mp4")) { 
      System.out.println("Set content-type: video/mp4"); 
      blob.getProperties().setContentType("video/mp4"); 
     } 

     blob.upload(new FileInputStream(source), source.length()); 

     return blob.getUri().toString(); 
    } catch (URISyntaxException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (StorageException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return null; 
} 
0

PHP, einer der Video-Typ, indem Sie die Inhalte hochladen können als

folgt
$blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString); 
//upload 
$blob_name = "video.mp4"; 
$content = fopen("video.mp4", "r"); 

$options = new CreateBlobOptions(); 
$options->setBlobContentType("video/mp4"); 
try { 
    //Upload blob 
    $blobRestProxy->createBlockBlob("containername", $blob_name, $content, $options); 
    echo "success"; 
} catch(ServiceException $e){ 
    $code = $e->getCode(); 
    $error_message = $e->getMessage(); 
    echo $code.": ".$error_message."<br />"; 
} 
+0

Dies funktioniert nicht mit aktuellen Paketen genau jetzt. –

Verwandte Themen