获取 Azure Asp.Net 核心服务器上图像的文件路径(在控制器中)

Get file path to image on Azure Asp.Net core server (in controller)

我知道这可能是一件容易的事,但我现在已经尝试了几种方法但都没有成功。我有一个名为 AuthorizeController.cs 的控制器。在此控制器内,我想为注册用户指定默认头像图像。

我在构造函数中这样做:

  private IWebHostEnvironment WebHostEnvironment { get; }
  private byte[] ProfilePicture { get; set; }

  this.ProfilePicture = System.IO.File.ReadAllBytes(
    string.Concat(this.WebHostEnvironment.WebRootPath, @"\Resources\avatar.png"));

我的图像位于同一个项目中:

MrDashWeb.Server
 - Resources
    - avatar.png 

在我的本地机器上,当我在本地主机上 运行 时,一切正常。但是,将其上传到 Azure 后,我在日志流中收到错误消息:

If the exception handler is expected to return 404 status responses then set AllowStatusCode404Response to true.---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Resources\avatar.png'.at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)

我做错了什么以及如何解决?

请创建以下界面以获取WebRootPathWebRootPath的值应该是D:\home\site\wwwroot\wwwroot

CheckPath():

public string CheckWebRootPath()
{
    string wwwPath = _webHostEnvironment.WebRootPath;
    return wwwPath;  
}

测试结果:

我也像下面这样测试了你的代码,我认为你的代码是正确的。

public string CheckFile()
{
   string wwwPath = _webHostEnvironment.WebRootPath;
   var ProfilePicture= System.IO.File.ReadAllBytes(
          string.Concat(wwwPath, @"\Resources\avatar.png"));
   return ProfilePicture.Length.ToString();
}

建议

  1. 检查WebRootPath的值,如果值为C:/,请在azure portal中重新创建一个新的webapp。

  2. 如果你的webapp名字是testapp,那么webappurl应该是

    https://testapp.azurewebsites.net
    

    然后您可以通过下面的方式查看您的文件url

    https://testapp.scm.azurewebsites.net