2014-12-03 46 views
0

我有它返回的圖像的文件對象的方法:如何將圖像文件對象從java顯示到jsp?

public File getPhoto(entryId){...} 

我把從我的操作方法這個方法和文件設置爲一個DTO文件變量:現在

myDto.photo = getPhoto(entryId); 
     // where entryId refers to the name of the image file 
     // e.g. ent01 for ent01.gif, ent02 for ent02.gif and so on. 

,在我的JSP文件我想通過這樣的代碼,以顯示圖像:

<img src = "${myDto.photo}"> 

然而,我意識到myDto.photo因此一個文件對象具有絕對而不是JSP中img src所需的URL。

通過搜索,我知道我可以使用servlet和使用類似

<img src = "${pageContext.request.contextPath}/image/ent01.gif"}. 

不過,我有點糊塗了這一個,因爲我想要的文件名部分(ent01.gif)改變基於輸入entryId。

我希望任何人都可以在這一個上爲我散光。非常感謝。

+0

你有關於春天的知識?如果是,那麼我可以舉個簡單的例子 – Secondo 2014-12-03 03:50:45

+0

我沒有看到你的代碼示例,你包括它們嗎? – Revent 2014-12-03 03:53:49

+0

修復了代碼示例。對於那個很抱歉。 – jaysn 2014-12-03 04:14:15

回答

0

你可以創建一個控制器類來爲你顯示你想要的圖像。

@Controller 
public class ImageReadFile{ 

    // this is for mapping your image related path. 
    @RequestMapping(value="/image/*") 
    public void readImage(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     ServletContext sc = request.getServletContext(); 

     //here i uploaded my image in this path 
     // You can set any path here 
     String imagePath = "/home/somefolder/Workspaces/Images/"; 
     String [] fragmentFilename = request.getServletPath().split("/"); 

     //Check if image isn't set 
     if(fragmentFilename.length <= 2){ 
      return; 
     } 

     String filename = fragmentFilename[2]; 
     String requestedImage = "/"+filename; 

     if(filename == null){ 
      response.sendError(HttpServletResponse.SC_NOT_FOUND); 
      return; 
     } 

     File image = new File(imagePath, URLDecoder.decode(requestedImage, "UTF-8")); 

     if(!image.exists()){ 
      response.sendError(HttpServletResponse.SC_NOT_FOUND); 
      return; 
     } 

     String contentType = sc.getMimeType(image.getName()); 
     response.reset(); 
     response.setContentType(contentType); 
     response.setHeader("Content-Length", String.valueOf(image.length())); 
     Files.copy(image.toPath(), response.getOutputStream()); 
    } 

} 

Servlet版本。

試試這個。

@WebServlet("/image/*") 
public class ImageWriter extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     doPost(request,response); 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     ServletContext sc = request.getServletContext(); 

     //here i uploaded my image in this path 
     // You can set any path here 
     String imagePath = "/home/somefolder/Workspaces/Images/"; 
     String [] fragmentFilename = request.getServletPath().split("/"); 

     //Check if image isn't set 
     if(fragmentFilename.length <= 2){ 
      return; 
     } 

     String filename = fragmentFilename[2]; 
     String requestedImage = "/"+filename; 

     if(filename == null){ 
      response.sendError(HttpServletResponse.SC_NOT_FOUND); 
      return; 
     } 

     File image = new File(imagePath, URLDecoder.decode(requestedImage, "UTF-8")); 

     if(!image.exists()){ 
      response.sendError(HttpServletResponse.SC_NOT_FOUND); 
      return; 
     } 

     String contentType = sc.getMimeType(image.getName()); 
     response.reset(); 
     response.setContentType(contentType); 
     response.setHeader("Content-Length", String.valueOf(image.length())); 
     Files.copy(image.toPath(), response.getOutputStream()); 

    } 

} 

這是你要如何設定在JSP中顯示出來,

<img alt="${imageFilename}" src="${pageContext.request.contextPath}/image/${imageFilename}"> 

只是通過文件名把jsp然後讓控制器讀取並顯示出來。

希望這會幫助你。