繁体   English   中英

Tomcat-在WEB-INF中显示图像

[英]Tomcat - display Image inside of WEB-INF

我目前正在开发JSP / Servlet应用程序,并且不希望私有图片不会被其他不拥有它们的用户访问。

我的问题是用户可以通过简单地在html查看器中重写路径来访问资产,这就是为什么我不得不将图片放入WEB-INF文件夹,而不是从外部对其进行访问。

图片位于/tomcat/myProject/ROOT/WEB-INF/Users/%userName%/

但是,既然图像在WEB-INF内,我就无法用servlet加载它们。

任何人都知道如何访问该图片,将其保存在session属性中并仅使它们对请求JSP的用户可见吗?

编辑:我拿了Kaleb Brasee的代码,并将其插入到我的方法中:

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ...
    BufferedImage image = ImageIO.read(new File(profilePicturePath));
    OutputStream responseStream = response.getOutputStream();
    ImageIO.write(image, "JPEG", responseStream);
    //session.setAttribute("profilepicture", PLACEHOLDER);  //PLACEHOLDER should be replaced by the actual Image, but I dont know how to do this
    //response.sendRedirect("/Index"); //doesnt get executed, because ImageIO.write(...) already commits a response before this line of code is reached
}

执行后,上面的代码将显示一个带有img标记的html页面,其中包含来自WEB-INF文件夹的图像,但仅此而已。

这不是所需的行为,我需要将ImageIO.write(...)输出保存为会话属性,因此可以将其插入到/Index JSP页面内部的特定位置。

关于如何解决这个问题的任何想法?

您可以创建一个将图像ID作为请求参数的servlet。 如果用户有权查看文件,则将其写入输出流,否则返回HTTP错误响应。

ImageIO.write方法对于将加载的图像写入HttpServletResponse OutputStream非常有用。

在加载PNG并将其写到响应之前,我已经使用了一些代码,如下所示:

response.setContentType("image/png");
BufferedImage image = generateImage(); // my custom method to create an image
OutputStream responseStream = response.getOutputStream();
ImageIO.write(image, "PNG", responseStream);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM