当用户上传图像时,它会存储在文件系统中,但不在公众可访问的范围内。
我正在显示一个项目列表,每个项目都有一个与之关联的图像。
当实际文件存储在 wwwroot 文件夹之外时,如何显示图像?即它不公开。
当用户上传图像时,它会存储在文件系统中,但不在公众可访问的范围内。
我正在显示一个项目列表,每个项目都有一个与之关联的图像。
当实际文件存储在 wwwroot 文件夹之外时,如何显示图像?即它不公开。
由于 action 方法在服务器上运行,它可以访问它有权访问的任何文件。该文件不需要在wwwroot
文件夹中。您只需要告诉操作方法要获取哪个图像。
例如:
<img src="/mycontroller/myaction/123">
您的操作将如下所示:
public FileResult MyAction(int id)
{
var dir = "c:\myimages\";
var path = Path.Combine(dir, id + ".jpg");
return new FileStreamResult(new FileStream(path, FileMode.Open), "image/jpeg");
}
请注意,该 idint
将阻止某人注入路径以访问驱动器/共享上的不同文件。
你可以通过两种方式做到这一点。
选项 1,您可以创建一个指向此其他目录的虚拟目录。这意味着您可以通过另一个 URL 访问图像。例如,创建一个名为“OtherImages”的虚拟目录,然后您的 URL 将是;
http://www.mywebsite.com/otherimages/myimage.jpg
选项 2,您可以创建一个简单HttpHandler
的可以从绝对路径加载图像,然后在响应中输出它。阅读HttpHandlers并动态生成图像。