2014-02-25 74 views
0

我已經編寫了以下代碼以在Windows Azure中上傳文件。 用戶需要輸入本地驅動器上的視頻文件路徑,如D:\ video \ 1.mp4和視頻名稱。我推入隊列中的信息。點擊上傳按鈕它將讀取隊列並獲取路徑並上傳視頻內容。下面的代碼在本地機器上工作正常,當我上傳相同的代碼在天藍色的捲筒紙上時,其未能讀取路徑在Azure Blob中上傳文件時出現異常

string [] x = retrievedMessage.AsString.Split(','); queue.DeleteMessage(retrieveMessage);

  using (var fileStream = System.IO.File.OpenRead(x[1])) 
      { 
       blockBlob.UploadFromStream(fileStream); 
      } 
+1

它正常工作的地方,因爲你有你的本地計算機上的文件。將代碼移到雲端不會移動本地文件?或者你有一些應用程序將文件上傳到雲服務的本地文件系統? –

+0

nope ...我沒有任何應用程序將文件加載到雲服務的本地文件系統 – user3227615

+0

除了查找文件之外,您是如何找到這些文件的?雲無法使用魔法從您的電腦中獲取文件。您可以將Microsoft硬盤發送給:http://weblogs.asp.net/scottgu/archive/2013/11/04/windows-azure-import-export-hard-drives-vm-acls-web-sockets-remote-調試 - 連續傳送 - 新 - 遺留 - 計費 - 警報 - 和 - more.aspx –

回答

0

我想你的系統中有一個web角色和一個工作角色(至少)。用戶選擇他/她的文件並在網站上提供名稱,然後您的網絡角色生成一條消息並推入隊列。然後,您的工作人員檢索消息並嘗試讀取該文件並將其保存在背景中的blob中。

如果我的假設是正確的,您應該遇到您提到的錯誤,因爲worker角色無法從消息{ "path": "D:\1.mp4", "name": "1.mp4" }中讀取用戶的本地文件。

一種解決方案是直接將Web角色中的文件上傳到Blob中。但是如果文件非常大,這可能會導致問題。

或者,您可以使用JavaScript和HTML5在瀏覽器中以並行方式在後臺上載文件(用戶不得刷新或離開您的頁面)。基本上,你可以生成一個SAS的blob容器並渲染到你的頁面中,然後通過JavaScript以塊的形式讀取文件並直接將它們上傳到blob。最後發送請求將這些塊組合成blob。

這裏是我的博客文章實力的人幫助http://blog.shaunxu.me/archive/2013/07/01/upload-file-to-windows-azure-blob-in-chunks-through-asp.net.aspx

+0

角色(網絡,工作者或兩者)或虛擬機的使用似乎無關緊要。問題是有一個本地文件路徑被推入隊列中。服務器端進程無論在哪裏運行,都無法讀取客戶端文件目錄。這是客戶端應用程序(或Web瀏覽器)的功能。 –

相關問題