2012-04-06 9 views
47

Abbiamo un sito Web ospitato su Azure. È basato sui media e stiamo utilizzando JWPlayer per riprodurre file multimediali con pseudostreaming HTTP. I file multimediali sono memorizzati su BLOB in 3 formati: mp4, ogg, webm.Imposta tipo di contenuto dei file multimediali archiviati su Blob

Il problema è il tipo di contenuto dei file multimediali impostato come application/octet-stream per tutti i tipi. A causa di questo ci sono alcuni problemi nella riproduzione dei file multimediali e nella barra di avanzamento.

Come è possibile impostare il tipo di contenuto appropriato di file memorizzati su BLOB (come - video/mp4, video/ogg, video/webm)?

Non voglio farlo manualmente per ogni file andando nell'interfaccia blob. Ci deve essere un altro modo per farlo, di cui non sono a conoscenza. Forse un file di configurazione, file di impostazioni, eccetera. O forse un blocco di codice per impostare il tipo di contenuto per tutti i file memorizzati in una cartella.

Qualche suggerimento? Grazie

risposta

87

questo dovrebbe funzionare:

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

o impostare un dizionario in modo da non dover scrivere un sacco di istruzioni if.

+0

Grazie smarx per il tuo aiuto. –

+1

@smarx: è anche possibile fare la stessa cosa in CDN, http://stackoverflow.com/questions/21847663/changing-video-content-type-mime-type-in-cdn-in-drupal-7 – Hitesh

+1

Non c'è alcuna possibilità di installarlo direttamente su Azure Portal? senza codifica – batmaci

8

Questo è ad esempio il lavoro a caricare i video Azure Blob di archiviazione con il diritto Content-Type:

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

utilizzando PHP, si può caricare il video impostando il tipo di contenuto come segue

$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

Questo non funziona con i pacchetti correnti come al momento. –