gpt4 book ai didi

java - Tomcat - 在 WEB-INF 中显示图像

转载 作者:行者123 更新时间:2023-11-28 22:11:11 24 4
gpt4 key购买 nike

我目前正在开发一个 JSP/Servlet 应用程序,不希望不拥有这些图片的其他用户访问私有(private)图片。

我的问题是用户可以通过简单地在他们的 html 查看器中重写路径来访问 Assets ,这就是为什么我必须将图片放入 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(...)作为 session 属性输出,因此我可以将其插入到我的 /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);

关于java - Tomcat - 在 WEB-INF 中显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44862059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com