我刚刚完成了我的asp MVC 5网站,该网站具有上传,显示和下载文件的功能。离线时,我将文件上传到根目录中的随机文件夹,如〜/ assest / images等,并且效果很好。
然后我部署到Windows Azure网站服务,并开始意识到根目录不再可访问。我开始做研究,发现只有App_Data可以访问存储文件。唉,这不是一个好的解决方案,我们无法在剃刀视图中显示文件,如图像。
我还发现BLOB存储,这看起来很棒,但没有足够的教程,我无法成功使用它。其中大多数是针对MVC Web角色的,而在我的情况下,它是MVC WEB SITES。
现在,我想找到另一个替代方案,是否有任何特殊的文件夹或解决方法,使一个折叠在根目录中,可以存储文件并检索它们?事实上,我的应用程序只需要几张图片和PDF来存储。
谢谢
答案 0 :(得分:3)
您不应该使用App_Data来使用Azure网站存储上传的文件。您只能获得有限的空间,如果您将站点扩展到更多实例,则上传的文件将仅在上载它们的实例上可用!
处理上传文件的正确方法确实是使用Blob存储。您可以从您的网站轻松使用它。只需安装Azure .NET存储客户端库(这是available from Nuget)。
有一个关于在http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/
使用Azure .NET存储客户端库的完整教程您可以通过公开blob容器轻松地在您的网站上显示上传的图像。然后,您可以直接链接到blob容器中的图像 - 它将具有类似
的URLhttps:// 您的存储帐户名称 .blob.core.windows.net / 您的blob容器名称 /filename.jpg
答案 1 :(得分:2)
如果您不需要太多存储空间,可以将文件存储在网站文件夹的任何位置。如果您将文件上传到APP_DATA以外的任何地方,我不确定为什么您会看到错误,您应该在任何地方都有完全写入权限。
与其他人的评论相反,如果您将文件存储在站点的本地存储中,那么您的文件可以安全地防止VM崩溃,并且可以立即供所有其他实例使用。这是因为文件实际上并没有存储在本地VM上,这只是一种幻觉。 (唯一的例外是如果你将东西存储在%TEMP%文件夹中。那些东西实际上保存在VM上并且可以随时消失。)
也就是说,如果您期望大量数据I / O或需要大量存储空间,那么blob存储是最佳方式。
答案 2 :(得分:1)
我不打算构建一个依赖于本地存储的天蓝色网站或Web服务的解决方案。您无法扩展此解决方案,并且VM可能会重新映像等。
我会查看blob存储,我将上传限制为小于4mb,因为我在将它们写入blob存储之前在服务器上验证它们,但你可以将它直接流式传输到存储中我相信。
这是Guide to uploading large files from MVC可能有助于您入门。