2012-04-06 26 views
47

Chúng tôi có một trang web được lưu trữ trên Azure. Nó là phương tiện truyền thông dựa trên, và chúng tôi đang sử dụng JWPlayer để phát lại phương tiện truyền thông với HTTP pseudostreaming. Các tập tin media được lưu trữ trên blob ở 3 định dạng - mp4, ogg, webm.Đặt Loại nội dung của các tệp phương tiện được lưu trữ trên Blob

Vấn đề là loại nội dung của tệp phương tiện được đặt làm ứng dụng/octet-stream cho tất cả các loại. Do đó, có một số vấn đề trong phát lại phương tiện và thanh tiến trình.

Làm cách nào để đặt loại nội dung thích hợp của tệp được lưu trữ trên blob (như - video/mp4, video/ogg, video/webm)?

Tôi không muốn làm điều đó theo cách thủ công cho từng tệp bằng cách đi vào giao diện blob. Phải có một số cách khác để làm điều đó mà tôi không biết. Có lẽ một tập tin cấu hình, tập tin cài đặt, vv loại. Hoặc có thể là một khối mã để thiết lập kiểu nội dung cho tất cả các tệp được lưu trữ trong một thư mục.

Mọi đề xuất? Cảm ơn

Trả lời

87

này nên làm việc:

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

Hoặc thiết lập một từ điển, do đó bạn không cần phải viết một loạt các câu lệnh if.

+0

Cảm ơn smarx cho sự giúp đỡ của bạn. –

+1

@smarx: Có thể thực hiện tương tự trong CDN không, http://stackoverflow.com/questions/21847663/changing-video-content-type-mime-type-in-cdn-in-drupal-7 – Hitesh

+1

Không có khả năng thiết lập này trên Azure Portal trực tiếp? mà không cần mã hóa – batmaci

8

Đây là ví dụ làm việc để tải lên video để Azure Blob lưu trữ với quyền 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

Sử dụng php, ai có thể tải lên các video bằng cách thiết lập các kiểu nội dung như sau

$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

Điều này không hoạt động với các gói hiện tại như ngay bây giờ. –

Các vấn đề liên quan