![](/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.