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

Kon*_*ten 0 c# asp.net-apicontroller asp.net-core

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

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

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

如何才能使该文件可供访问?

Laz*_*iya 6

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

_hostingEnvirounment.ContentRootPath将返回:

D:\Hosting\ProjectFolder

_hostingEnvirounment.WebRootPath将返回:

D:\Hosting\ProjectFolder\wwwroot

所以就你的情况而言;注入IWebHostEnvirounment您的控制器,然后获取内容根文件夹,如下所示:

public class MyApiController : ControllerBase {

    private readonly IWebHostEnvirounment _hostingEnvirounment;

    public MyApiController(IWebHostEnvironment 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);
    }
}
Run Code Online (Sandbox Code Playgroud)