我想将html画布上传到java servlet并将画布数据作为png图像返回。我的问题是来自servlet的响应不正确,因此没有呈现为图像。将文件保存在磁盘上可以正常工作。
我做错了什么?我需要设置更多标题吗?内容长度?
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
BufferedImage bfi = null;
OutputStream out = null;
PrintWriter htmlOut = null;
try{
response.setContentType("image/png");
String img64 = (String) request.getParameter("base64image");
byte[] decodedBytes = DatatypeConverter.parseBase64Binary(img64 );
bfi = ImageIO.read(new ByteArrayInputStream(decodedBytes));
out = response.getOutputStream();
ImageIO.write(bfi, "png", out);
//Save on disk
File outputfile = new File("webapps/saved.png");
ImageIO.write(bfi , "png", outputfile);
}catch(Exception e){
//ERROR HANDLING
}
finally{
if(bfi != null){
bfi.flush();
}
if(out != null){
out.flush();
out.close();;
}
if(htmlOut != null){
htmlOut.close();
}
}
}
答案 0 :(得分:0)
也许我是盲人,但我只是看不到你在响应对象上设置Content-Length标头。
答案 1 :(得分:0)
我遇到了同样的问题,但仅在IE中出现错误消息:
String contentType = MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(file);
if (contentType == null) {
log.warn("Cannot get mime type of file" + file.getAbsolutePath());
} else {
response.setContentType(contentType);
}
response.setContentLength((int)file.length());
以下帖子帮助了我: https://stackoverflow.com/a/8623747/1064057
我必须设置mime类型和内容长度。
# General Configuration
sonar.security.realm=LDAP
ldap.url=ldap://ldap:389
# User Mapping
ldap.user.baseDn=ou=users,ou=udd,dc=example,dc=com
ldap.user.request=(&(objectClass=inetOrgPerson)(uid={uid}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail
也许这会对另一个案例或其他人有所帮助。
亲切的问候
斯坦