【问题标题】:exception while uploading file in azure blob在 azure blob 中上传文件时出现异常
【发布时间】:2014-02-26 14:02:24
【问题描述】:

我已经编写了以下代码以在 Windows azure 中上传文件。 用户需要输入视频文件在本地驱动器上的路径,如 D:\video\1.mp4 和视频名称。我将两个信息都推送到队列中。单击上传按钮后,它将读取队列并获取路径并上传视频内容。当我在 azure webrole 上上传相同的代码时,下面的代码在本地机器上工作正常,它无法读取路径

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

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

【问题讨论】:

  • 它可以在本地正常工作,因为您在本地计算机上有文件。将代码移动到云端不会移动您的本地文件吗?或者你有一些将文件上传到云服务的本地文件系统的应用程序?
  • 不...我没有任何应用程序将文件加载到云服务的本地文件系统
  • 那么除了查找文件,您还怎么做呢?云无法使用魔法从您的电脑中获取文件。您可以将您的硬盘发送给 Microsoft:weblogs.asp.net/scottgu/archive/2013/11/04/…

标签: azure azure-web-roles


【解决方案1】:

我猜你的系统中有一个网络角色和一个工作角色(至少)。用户在网站中选择他/她的文件并提供名称,然后您的 Web 角色生成一条消息并推送到队列中。然后您的工作人员检索消息并尝试读取文件并在后台保存在 blob 中。

如果我的假设是正确的,那么您应该遇到您提到的错误,因为辅助角色无法从消息 { "path": "D:\1.mp4", "name": "1.mp4" } 中读取用户的本地文件。

一种解决方案是将文件从您的网络角色直接上传到 blob。但是如果文件非常大,这可能会导致问题。

您也可以使用 JavaScript 和 HTML5 在浏览器后台并行上传文件(用户不得刷新或离开您的页面)。基本上,您可以生成 blob 容器的 SAS 并渲染到您的页面中,然后通过 JavaScript 以块的形式读取文件并将它们直接上传到 blob。最后发送请求将这些块组合成 blob。

这是我的一篇博文,可能对http://blog.shaunxu.me/archive/2013/07/01/upload-file-to-windows-azure-blob-in-chunks-through-asp.net.aspx有帮助

【讨论】:

  • 角色(网络、工作人员或两者兼有)或虚拟机的使用似乎无关紧要。问题是有一个本地文件路径被推入队列。服务器端进程,无论它在哪里运行,都无法读取客户端文件目录。这是客户端应用程序(或网络浏览器)的功能。
猜你喜欢
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 2021-06-10
  • 2013-05-30
  • 2014-08-08
  • 2017-08-24
  • 2017-05-04
  • 1970-01-01
相关资源
最近更新 更多