2013-02-20 67 views
7

我們使用ASP.NET MVC 4允許用戶通過我們的網站上傳視頻和音頻。我想使用Azure媒體服務作爲後端。如何將Stream上傳到Azure媒體服務

雖然跟着Azure's tutorial,我遇到的問題是Azure媒體服務SDK似乎不允許上傳原始數據流。相反,唯一可以找到的上傳方法使用路徑字符串參數。

我想避免將文件保存到磁盤(​​),並且能夠將請求發佈的文件直接傳輸到Azure。

這裏是我的代碼至今:

public void SaveMedia(string fileName, System.IO.Stream stream) 
{ 
    CloudMediaContext mediaCloud = new CloudMediaContext("account", "key"); 
    AssetCreationOptions assetOptions = new AssetCreationOptions(); 
    var asset = mediaCloud.Assets.Create(fileName, assetOptions); 

    var assetFile = asset.AssetFiles.Create(fileName); 

    var accessPolicy = mediaCloud.AccessPolicies.Create(fileName, TimeSpan.FromDays(3), AccessPermissions.Write | AccessPermissions.List); 

    var locator = mediaCloud.Locators.CreateLocator(LocatorType.Sas, asset, accessPolicy); 

    assetFile.Upload("????????????"); 

    locator.Delete(); 
    accessPolicy.Delete(); 
} 

怎樣才能做到這一點?這與使用ASP.NET MVC 4和Azure Media Services處理上載的任何「最佳實踐」是否會發生衝突?

回答

10

您應該使用不使用Azure媒體服務來進行上載,它不適用於您正在描述的入站流到存儲區blob。

直接使用Azure存儲SDK(使用v1.7避免重新綁定問題)。 Storage SDK允許流寫入blob。 爲此,您需要首先獲取SAS寫定位器(看起來像您在那裏),然後使用locator.Path.Segments來查找資產容器。然後使用它直接使用Storage SDK中的CloubBlobClient進行上傳 - 它在某處提供了流寫入功能。

請注意上面的代碼:您沒有指定AssetCreationOptions.None,因此它會假定存儲中的文件將進行存儲加密(默認傳輸機制是安全的,而不是不安全的)。我認爲您不會在上傳之前在文件流中執行存儲加密,因此您最好將其設置爲AssetCreationOptions.None。

就我個人而言,我不會走這條路。閱讀我的博客文章在「創建您自己的YouTube」: http://blog-ndrouin.azurewebsites.net/?p=1471

在這裏面,還有的利用服務器端提供一個SAS URL(其中有您的帳戶憑據客戶端上傳的內容的一個完整的例子,你可能不想在你的客戶端上浮動!)。

但是,客戶端必須能夠使用該SAS URL執行PUT存儲操作。就我而言,我使用了C#命令行應用程序。除非您的網頁託管在與目標存儲帳戶相同的域中,否則您將無法在HTML5中執行此操作。如果您的網頁(或管理上傳的I-Frame)與您的存儲帳戶不在同一個域中,則會在HTML5中觸發CORS「OPTIONS」呼叫到Azure存儲REST層,該層尚不支持CORS 。

存儲帳戶中託管的HTML5 I-Frame的替代方法是:Sliverlight或Flash使用存儲帳戶的$ root中的跨域文件上載填充塊(或者也可能是存儲帳戶中託管的那些插件對象以避免跨域文件請求)。

我不鼓勵上傳文件流到服務器的POST。這會使您的Web服務成爲所有入站文件的瓶頸;而且長時間的POST不是特別穩定:您的應用程序池可以在上傳過程中得到回收,並且您可以烤麪包。

PS。我們的團隊(Windows Azure的媒體服務),主要是監視該論壇:

http://social.msdn.microsoft.com/Forums/en-US/MediaServices/threads

+0

感謝您的答覆和方向!我會盡力在您的文章中儘可能地實施這些步驟。我們真的很想在兩端實現HTML5解決方案(上傳器和流媒體)。 – 2013-02-21 21:00:57

相關問題