2014-02-25 46 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浏览器)的功能。 –

相关问题