我有一个Spring MVC应用程序,其中一个JSP必须显示来自数据库的图像。
图像作为Blob存储在数据库中。
显示它们的最简单方法是什么?我需要在JSP上显示什么样的servlet /控制器图像字节?应该是一个简单的问题,但我无法在任何地方找到完整的解决方案。
我的理解是我需要一个单独的控制器,比如ImgController / id =,它将根据请求参数显示图像字节,然后在我的JSP中我可以有img src =“ImgController / id ...” 。但是如何实现和连接这个控制器?
任何帮助或示例都会非常感激。非常感谢。
答案 0 :(得分:8)
最简单的解决方案(以尽可能少的方式编写)是一个带有返回类型OutputStream或ResponseEntity的Spring MVC控制器方法。
我更喜欢:返回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();
}
答案 1 :(得分:2)
我编写了一些代码here!
如果符合您的情况,请查看并告诉我。我认为这应该有用。