在文件系统中成功上传了图像,我希望能够访问它。所以,我写了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
- 方法
答案 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目录中。