我有一个 Spring MVC 应用程序,其中一个 JSP 必须显示来自数据库的图像。

图像以 Blob 的形式存储在数据库中。

显示它们的最简单方法是什么?我需要什么样的 servlet/ Controller 才能在 JSP 上显示图像字节?应该是一个简单的问题,但我无法在任何地方找到完整的解决方案。

我的理解是我需要一个单独的 Controller ,比如 ImgController/id=,它将根据请求参数显示图像字节,然后在我的 JSP 中我可以有 img src="ImgController/id...".但是我该如何实现和连接这个 Controller 呢?

任何帮助或示例将不胜感激。非常感谢。

请您参考如下方法:

最简单的解决方案(就尽可能少写而言)是返回类型为 OutputStream 或 ResponseEntity 的 Spring MVC Controller 方法。

我更喜欢:返回一个 ResponseEntity:

@RequestMapping(value = "/reportTemplate/{id}/content", method = RequestMethod.GET) 
public ResponseEntity<byte[]> downloadReportTemplateContent( 
        @PathVariable("id") final ReportTemplate reportTemplate) 
        throws IOException { 
    ReportDatei file = reportTemplate.getFile(); 
 
    String fileName = reportTemplate.getName() + EXCEL_FILE_NAME_ENDING; 
    HttpHeaders responseHeaders = httpHeaderExcelFileAttachment(fileName, 
                                    datei.getDaten().length); 
    return new ResponseEntity<byte[]>(file.getDataArray(), 
                                      responseHeaders, HttpStatus.OK); 
} 
 
 
public static HttpHeaders httpHeaderExcelFileAttachment(final String fileName, 
        final int fileSize) { 
    String encodedFileName = fileName.replace('"', ' ').replace(' ', '_'); 
 
    HttpHeaders responseHeaders = new HttpHeaders(); 
    responseHeaders.setContentType(MediaType.parseMediaType("application/vnd.ms-excel")); 
    responseHeaders.setContentLength(fileSize); 
    responseHeaders.set("Content-Disposition", "attachment"); 
    responseHeaders.add("Content-Disposition", "filename=\"" + encodedFileName + '\"'); 
    return responseHeaders; 
} 

但还有更多:

直接使用HttpServletResponse

@RequestMapping(value = "/document/{id}/fileContent", method = RequestMethod.GET) 
    public void getDocumentFileContent(final HttpServletResponse response, 
            @PathVariable("id") final Document document) 
            throws IOException { 
        FileContentUtil.writeFileContentToHttpResponse(document.getFile(), 
                        response, this.fileService); 
    } 
 
    public static void writeFileContentToHttpResponse(final CommonFileInfo fileInfo, 
              final HttpServletResponse response, 
              final FileService fileService) throws IOException { 
        String mimeType = fileInfo.getMimeType() != null ? fileInfo.getMimeType() : CommonFileInfo.DEFAULT_MIME_TYPE; 
        String fileName = fileInfo.getOriginalName().replace('"', ' '); 
 
        FileContent fileContent = fileService.loadFileContent(fileInfo.getFileContentBusinessId()); 
        response.setContentType(mimeType); 
        response.setContentLength(fileInfo.getSize()); 
        response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + '"'); 
 
        response.getOutputStream().write(fileContent.getContent()); 
        response.getOutputStream().flush(); 
    } 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!