我已成功将图像上传到
C:\Users\MyComputerName\Desktop\MyWorkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyWebApp\data
图像名称示例lala.jpg保存在数据库中。
lala.jpg
现在,我试图在我的jsp中显示图像。
我发现我们需要创建一个Servlet,该Servlet可以从Web容器外部加载文件,然后将文件写入/流式传输到您的响应中。示例之一是BalusC的File Servlet。
我尝试遵循,但无法显示图像。
谁能指出我的错误?帮助将不胜感激。谢谢!:)
以下是我的代码。
jsp
<table> <thead> <tr> <th>Name</th> <th>Image</th> </tr> </thead> <tbody> <c:forEach items="${staff}" var="staff"> <tr> <td>${staff.staffName}</td> <td><img src="FileServlet?path=C:\Users\MyComputerName\Desktop\MyWorkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyWebApp\data\${staff.staffImage}"></td> </tr> </c:forEach> </tbody> </table>
在 文件Servlet中
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Get requested file by path info. String requestedFile = request.getParameter("path"); System.out.println(requestedFile); // Decode the file name (might contain spaces and on) and prepare file object. File file = new File(requestedFile); // Get content type by filename. String contentType = getServletContext().getMimeType(file.getName()); // If content type is unknown, then set the default value. // For all content types, see: http://www.w3schools.com/media/media_mimeref.asp // To add new content types, add new mime-mapping entry in web.xml. if (contentType == null) { contentType = "application/octet-stream"; } // Init servlet response. response.reset(); response.setBufferSize(DEFAULT_BUFFER_SIZE); response.setContentType(contentType); response.setHeader("Content-Length", String.valueOf(file.length())); response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\""); // Prepare streams. BufferedInputStream input = null; BufferedOutputStream output = null; try { // Open streams. input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE); output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE); // Write file contents to response. byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; int length; while ((length = input.read(buffer)) > 0) { output.write(buffer, 0, length); } } finally { // Gently close streams. close(output); close(input); } } // Helpers (can be refactored to public utility class) ---------------------------------------- private static void close(Closeable resource) { if (resource != null) { try { resource.close(); } catch (IOException e) { // Do your thing with the exception. Print it, log it or mail it. e.printStackTrace(); } } }
在 web.xml中
<servlet> <display-name>FileServlet</display-name> <servlet-name>FileServlet</servlet-name> <servlet-class>servlet.FileServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FileServlet</servlet-name> <url-pattern>/FileServlet</url-pattern> </servlet-mapping>
正确的网址是:
<img src="FileServlet?path=C:\Users\MyComputerName\Desktop\MyWorkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyWebApp\data\\<c:out value="${staff.staffImage}"/>">