C# 从文件系统返回图像

C# 从文件系统返回图像,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,文件系统中已成功上载图像,我想访问它。因此,我编写了GET-方法 [HttpGet] public ActionResult Get(string id) { var path = $@"d:\smth\upload\{id}.jpeg"; return File(path, "image/jpeg"); } 我完全确定在所需路径中有具有所需名称的文件,但任何时候尝试创建文件(路径,“image/jpeg”)我得到都找不到文件异常。似乎我无法访问wwwroot之外的文件夹。也许

文件系统中已成功上载图像,我想访问它。因此,我编写了
GET
-方法

[HttpGet]
public ActionResult Get(string id) {
    var path = $@"d:\smth\upload\{id}.jpeg";
    return File(path, "image/jpeg");
}
我完全确定在所需路径中有具有所需名称的文件,但任何时候尝试创建
文件(路径,“image/jpeg”)
我得到
都找不到文件
异常。似乎我无法访问
wwwroot
之外的文件夹。也许我错过了一些重要的东西


那么,有人能解释一下如何通过
GET
-method

返回存储在web服务器文件夹外的文件系统中的图像吗?如果可以,这意味着外部世界的每个人都可以制作一个GET/POST表单并访问公用文件夹外的文件。如果有人将文件上载到您的Web服务器,它应该位于您的tmp目录中,您应该能够使用asp访问该目录。

文件
方法没有占用物理位置的重载。有一个采用虚拟路径,您的图像应位于web app根目录下

[HttpGet]
public ActionResult Get(string id) {
    var path = $@"d:\smth\upload\{id}.jpeg";
    return File(path, "image/jpeg");
}
但是,您可以将其用于您的用例。这个方法将字节数组作为
File
方法的第一个参数。您可以从可访问的物理目录(假设您的文件存在)读取该文件,并将其转换为字节数组并将其传递给file方法

[HttpGet]
public ActionResult Get(string id)
{
   var path = $@"d:\smth\upload\{id}.jpeg";
   byte[] bytes = System.IO.File.ReadAllBytes(path);
   return File(bytes, "image/jpeg");
}

@Shyju所说的是正确的,
File
helper方法不接受物理文件路径,
PhysicalFile
helper方法接受物理文件路径(请参阅)


顺便说一句,引用的MSDN文章是关于ASP.NET MVC(您可以在System.Web.*命名空间上看到它),而不是ASP.NET Core MVC,它是对webstack的完全重写,它对System.Web.*没有任何依赖性(因此对IIS没有依赖性),请下次使用正确的标记,以获得适当的答案!asp.net-mvc标记用于旧的mvc webstack!用于ASP.NET核心MVC!!