当图像存储在Web根目录之外时,如何在页面上显示图像

时间:2013-08-20 15:29:55

标签: asp.net asp.net-mvc file-io

当用户上传图片时,它会存储在文件系统中,但不在公开的位置。

我正在显示一个项目列表,每个项目都有一个与之关联的图像。

当实际文件存储在wwwroot文件夹之外时,如何显示图像?即它不公开。

2 个答案:

答案 0 :(得分:6)

由于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");
}

请注意,该ID为int,可防止有人注入路径以访问驱动器/共享上的不同文件。

答案 1 :(得分:3)

你可以这两种方式。

选项1,您可以创建指向此其他目录的虚拟目录。这意味着您可以通过其他URL访问图像。例如创建名为“OtherImages”的虚拟目录,然后您的URL将是;

http://www.mywebsite.com/otherimages/myimage.jpg

选项2,您可以创建一个简单的HttpHandler,它可以从绝对路径加载图像,然后在响应中输出。阅读HttpHandlers并动态生成图像。