如何在运行时在WebAPI .NET Core中从光盘读取文件

时间:2019-01-24 01:21:19

标签: c# asp.net-core asp.net-apicontroller

在我的解决方案中,我的根目录中直接在 Startup.cs 文件旁边,有一个名为 beep.png 的文件。我将其属性更改为始终复制。我激活了 UseFileServer 并选择浏览以确保目录结构。

但是,当我运行代码Image.FromFile("beep.png");时,只会收到未找到文件的错误。

  

System.IO.FileNotFoundException
    Message = C:\ Program Files \ IIS Express \ beep.png

如何使文件可访问?

1 个答案:

答案 0 :(得分:2)

使用IHostingEnvirounment获取根目录内容路径(技术上是项目文件夹),或获取Web根目录路径(项目文件夹下的wwwroot文件夹)。

_hostingEnvirounment.ContentRootPath将返回:

  

D:\ Hosting \ ProjectFolder

_hostingEnvirounment.WebRootPath将转向:

  

D:\ Hosting \ ProjectFolder \ wwwroot

因此,在您的情况下;将IHostingEnvirounment注入您的控制器,然后获得内容根文件夹,如下所示:

public class MyApiController : ControllerBase {

    private readonly IHostingEnvirounment _hostingEnvirounment;

    public MyApiController(IHostingEnvironment hostingEnvironment)
    {
        _hostingEnvironment = hostingEnvironment;
    }

    // get image from project root folder \ProjectFolder\
    public Image GetImageFromContentRoot(string name) {

        // e.g.: imgPath = "D:\\Hosting\\ProjectFolder\\beep.png"
        var imgPath = Path.Combine(_hostingEnvirounment.ContentRootPath, name);

        return Image.FromFile(imgPath);
    }

    //get image from projects wwwroot folder
     public Image GetImageFromWebRoot(string name) {

        // e.g.: imgPath = "D:\\Hosting\\ProjectFolder\\wwwroot\\beep.png"
        var imgPath = Path.Combine(_hostingEnvirounment.WebRootPath, name);

        return Image.FromFile(imgPath);
    }
}