2012-04-06 21 views
47

Tenemos un sitio web alojado en Azure. Está basado en medios, y estamos utilizando JWPlayer para reproducir medios con pseudostreaming HTTP. Los archivos multimedia se almacenan en blob en 3 formatos: mp4, ogg, webm.Establecer el tipo de contenido de los archivos multimedia almacenados en Blob

El problema es que el tipo de contenido de los archivos multimedia se establece como application/octet-stream para todos los tipos. Debido a esto, hay algunos problemas en la reproducción de medios y la barra de progreso.

¿Cómo puedo configurar el tipo de contenido apropiado de los archivos almacenados en blob (como - video/mp4, video/ogg, video/webm)?

No quiero hacerlo manualmente para cada archivo yendo en la interfaz blob. Debe haber alguna otra forma de hacerlo de la que no tengo conocimiento. Tal vez un archivo de configuración, archivo de configuración, etc. ordena. O tal vez un bloque de código para configurar el tipo de contenido para todos los archivos almacenados en una carpeta.

¿Alguna sugerencia? Gracias

Respuesta

87

esto debería funcionar:

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 la creación de un diccionario por lo que no tiene que escribir un montón de sentencias if.

+0

Gracias smarx por tu ayuda. –

+1

@smarx: ¿También es posible hacer lo mismo en CDN, http://stackoverflow.com/questions/21847663/changing-video-content-type-mime-type-in-cdn-in-drupal-7 – Hitesh

+1

¿No hay ninguna posibilidad de configurar esto en Azure Portal directamente? sin codificar – batmaci

8

Este es un ejemplo de trabajo para cargar vídeo a Azure Blob de almacenamiento con derecho 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

usando PHP, se puede subir el vídeo estableciendo el tipo de contenido de la siguiente manera

$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

Esto no funciona con los paquetes actuales a partir de ahora. –

Cuestiones relacionadas