【问题标题】:Azure App Service - write to filesystem - ASP.NET web applicationAzure 应用服务 - 写入文件系统 - ASP.NET Web 应用程序
【发布时间】:2021-05-20 16:17:05
【问题描述】:

我有一个在 Visual Studio 2017 中创建的 ASP.NET Web 应用程序。

在应用程序中有一个表单,用户可以在其中上传文件。上传文件后,我会处理它们并将它们保存在文件系统中:

var photo = Request.Files["file"];
photo.SaveAs("D:\\home");

在本地一切正常,但是当我在 Azure 应用服务上部署应用程序时却无法正常工作。

我在 Azure 上读到了路径

D:\home

应该是可写的。

但是当我尝试代码时,我得到了这个错误:

Access to the path 'd:\home\test_image.JPG' is denied.

【问题讨论】:

  • d:\home 可能(甚至)不存在。看看@sprinter252 的回答,或者获取临时文件夹,或者使用存储。

标签: asp.net azure file-io azure-web-app-service


【解决方案1】:

使用 %TEMP%,它在 Azure 应用服务 (Windows) 上解析为 d:\local。那是本地机器磁盘,而不是网络存储,因此速度明显更快。它会在应用重启时被擦除,因此请相应地编写代码。

var tempDirectoryPath = Environment.GetEnvironmentVariable("TEMP");
var filePath = Path.Combine(tempDirectoryPath, Request.Files["file"]);

如果您想要持久性,请改用 Blob 存储。

【讨论】:

  • 我们可以读取存储在这个 Temp 文件夹中的文件吗?如果是,那么如何。其实我想在网上显示那个上传的文件。
  • 如果您谈论的是用户上传,您应该上传到 Blob 存储而不是应用服务临时存储。没有什么能阻止您从临时存储中读取内容。您可以像在代码中从磁盘中读取任何其他文件一样读取它。
  • 在哪里存储数据以在重启后保留它们?
  • D:\HOME\ 在 Windows 工作人员和 /home/ 对于 Linux。
【解决方案2】:

您不应该在服务器组件上使用绝对路径。例如尝试这样的事情

var folder = Environment.GetFolderPath(System.Environment.SpecialFolder.CommonApplicationData);
var filePath = Path.Combine(folder, Request.Files["file"]);

【讨论】:

  • 感谢您的快速回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 2012-08-21
  • 2018-04-09
  • 2020-07-10
相关资源
最近更新 更多