安全地在网站上显示图像

时间:2013-10-27 16:00:16

标签: c# jquery asp.net ajax image

我目前在网络根目录之外存储了许多文档预览图像(jpg / tif)。它们有100个,因此有效地完成这项工作非常重要。 它们存储在Web根目录之外的原因是它们包含唯一特定用户/用户组可以查看的数据(但每个用户可以拥有100个可以查看的文档)。

我当前的实现是,当用户选择“查看图像”时,会触发ajax调用,这会将相关图像移动到Web根目录中的特定文件夹。该位置被传回并用于向用户显示图像。 单击下一个图像时,该调用将删除所请求图像上的所有现有图像和副本。在会话注销/超时时,用户图像文件夹被清空。 这有一些问题,但主要是:

  1. 不断复制和删除文件
  2. 文件夹中存在图像的风险(注销脚本问题)
  3. 图像在文件夹中的整个时间,其他用户可以查看(不太可能,但可能)
  4. 有更好的方法吗?我试着将BinaryReader与ajax调用结合起来(因为我希望这会减少复制文件的需要),但是无法看到如何将数据恢复到JS在调用页面中使用。

    或者,是否有一种方法可以根据某些会话标准仅对给定用户访问所选文件夹? (我无法想象有,但我认为值得问。)

    因此,如果有人对如何改进这一点有任何想法,那就太棒了。 这是一个使用Jquery的c#ASP.NET应用程序。

    编辑: 使用ajax显示图像,这允许预加载,并且还意味着当他们选择下一个/上一个图像时不需要重新加载页面的其余部分。 它几乎可以被认为是一个javascript图像交换器类型的情况,其中图像存储在Web根目录之外。

    感谢。

3 个答案:

答案 0 :(得分:1)

  

我当前的实现是,当用户选择“查看图像”时,会触发ajax调用,这会将相关图像移动到Web根目录中的特定文件夹。

这是一个可怕的想法。您意识到您可以访问图像数据并将其作为具有特定mime类型的流传递给Web,对吧?

答案 1 :(得分:0)

也许尝试编写一个通过cookie检查用户凭据的方法,如果不行则加载并发回一些标准图像,表示用户必须登录查看文件,如果可以,则加载并显示基于url参数的root之外的路径中的适当文件(使用content-type等适当的标头也经常称为mime-type ofc)。然后使用适当的参数将URL链接到该方法。

您可以轻松找到代码示例(如here),以便从DB以二进制形式显示图像。您只需要从root之外的某个路径加载它们,而不是DB。

此外,您不需要通过AJAX加载它 - 只需添加IMG与SRC指向处理程序的URL。如果需要下载未显示,则重定向/打开窗口。

答案 2 :(得分:0)

问题是如何通过不在网络根目录中的javascript来显示图像。

我创建了一个基于会话值(身份验证)的通用处理程序(ashx文件),并且提交的参数将返回一个图像。

反过来又通过AJAX调用。