![](/img/trans.png)
[英]Why can't I see an image inside the WEB-INF/classes directory in Tomcat?
[英]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.