我正在开发一个 spring 3.2.7 应用程序,它通过输出字节数组 ResponseEntity 的 spring 控制器将存储在数据库中的签名作为 base64 字符串发送回用户浏览器。
图像总是损坏的,并且我没有在系统的这一部分上工作,因为我在 svn 中进行了双重检查,并且自从创建我正在处理的分支以来控制器还没有被触及。
我能够将 base64 字符串转换为桌面上的图像,并且还能够在 spring 介入之前将返回到浏览器的字节数组转换为图像。
下面是我的代码,这显然之前是有效的,所以也许有一些配置更改可能会导致这种情况?
@RequestMapping(value = "/submissions/signature/{type}/{id}", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<byte[]> getSignature(@PathVariable String type, @PathVariable Integer id) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
String base64 = ... gets from db
byte[] bytes = Base64.decodeBase64(base64);
BufferedImage bi = ImageIO.read(new ByteArrayInputStream(bytes));
ImageIO.write(bi, "png", baos);
HttpHeaders headers = new HttpHeaders();
headers.setLastModified(Calendar.getInstance().getTime().getTime());
headers.setCacheControl("no-cache");
headers.setContentType(MediaType.IMAGE_PNG);
headers.setContentLength(baos.toByteArray().length);
//Image as base64 string is ok in converter
System.out.println("BASE 64 IMAGE IS: " + base64);
//This image is created ok on desktop
FileOutputStream fos = new FileOutputStream("C:\\Users\\p\\Desktop\\test_signature.png");
fos.write(bytes);
fos.close();
//This image is created ok on desktop
FileOutputStream fos3 = new FileOutputStream("C:\\Users\\p\\Desktop\\test_signature_baos.png");
fos3.write(bytes);
fos3.close();
return new ResponseEntity<byte[]>(baos.toByteArray(), headers, HttpStatus.OK);
}
图像在浏览器中呈现如下:
<img id="userSignature" width="296" height="110" style="border:0px" src="/webapp/service/submissions/signature/user/${subid}" alt="User signature" />
我没有更改这个类,我被告知它确实有效,我能够从两个字节数组创建图像,它们都很好并且看起来相同,并且我能够渲染签名字符串以进行测试,例如:
<IMG SRC="data:image/png;base64, <base_64_string>" ALT="">
有没有人经历过类似的问题或知道可能导致此问题的原因是什么?
我现在尝试从已创建为 png 的文件系统发送图像,但也失败了。
我现在注意到 CSV 文件无法在应用程序中正确下载,并且它们以相同的方式进行传输:
@RequestMapping(value = "/results/csv", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<byte[]> getResultsInCsvFormat() throws IOException {