从文件系统

时间:2016-09-03 18:44:03

标签: 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");
}

我完全确定所需路径中的文件包含所需名称,但只要尝试创建File(path, "image/jpeg"),我就会获得Could no find file异常。好像我无法访问wwwroot之外的文件夹。也许我错过了working with static file article的重要内容?

那么,有没有人能解释如何通过GET - 方法

返回存储在web-server文件夹外的文件系统中的图像

3 个答案:

答案 0 :(得分:6)

虽然@Shyju说的是真的并且File辅助方法不接受物理文件路径,但PhysicalFile辅助方法确实如此(参见GitHub source)。

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

答案 1 :(得分:3)

File方法没有占用物理位置的重载。有一个采用虚拟路径,您的图像应该在web app root下。

但是你可以使用another overload作为用例。这个将一个字节数组作为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");
}

答案 2 :(得分:-2)

如果可以的话,你不能这意味着外界的每个人都可以制作一个GET / POST表单并访问公共文件夹之外的文件。如果有人将文件上传到您的网络服务器,它应该驻留在您应该能够使用asp访问的tmp目录中。