从文件系统返回映像

本文关键字:映像 返回 文件系统 | 更新日期: 2023-09-27 18:05:36

文件系统中有成功上传的图像,我想访问它。因此,我写了GET -method

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

我完全确定在所需的路径中有所需的名称的文件,但任何时候尝试创建File(path, "image/jpeg"),我得到Could no find file例外。似乎我无法访问wwwroot以外的文件夹。也许我错过了一些重要的工作与静态文件文章?

那么,有没有人可以解释如何通过GET -method返回存储在web服务器文件夹外的文件系统中的图像

从文件系统返回映像

虽然@Shyju说的是真的,而且File helper方法不接受物理文件路径,但PhysicalFile helper方法可以(参见GitHub源代码)。

[HttpGet]
public ActionResult Get(string id) {
    var path = $@"d:'smth'upload'{id}.jpeg";
    return PhysicalFile(path, "image/jpeg");
}

File方法没有接受物理位置的重载。有一个使用虚拟路径,你的图像应该在web app根目录下。

但是还有另一个重载,您可以为您的用例使用它。这个方法将字节数组作为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");
}

你不能,如果你可以,那就意味着外部世界的每个人都可以做一个GET/POST表单并访问公共文件夹之外的文件。如果有人上传文件到你的web服务器,它应该驻留在你的tmp目录下,你应该可以使用asp.

访问该目录。