一、问题描述
网页上某些图片用 火狐 、谷歌、360极速模式等都可以正常显示。但是用 ie、360兼容模式 却不能正常显示。浏览器报DOM7009: 无法解码 URL 处的图像。
二、原因
ContentType内容格式不正确,例如将image/png,写成image/jpeg。
@RequestMapping("/captcha.do")
public void getCaptcha(HttpServletRequest request, HttpServletResponse response) {
// 设置相应类型,告诉浏览器输出的内容为图片
response.setContentType("image/jpeg");
// 不缓存此内容
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expire", 0);
ServletOutputStream out = null;
try {
# Hutool工具包生成验证码(输出图片为png格式)
AbstractCaptcha captcha = CaptchaUtil.createLineCaptcha(200, 100);
captcha.setBackground(new Color(15, 70, 140, 255));
HttpSession session = request.getSession();
session.removeAttribute(KEY_CAPTCHA);
session.setAttribute(KEY_CAPTCHA, captcha.getCode());
out = response.getOutputStream();
captcha.write(out);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
三、解决办法
response.setContentType(“image/png”);
@RequestMapping("/captcha.do")
public void getCaptcha(HttpServletRequest request, HttpServletResponse response) {
// 设置相应类型,告诉浏览器输出的内容为图片
response.setContentType("image/png");
// 不缓存此内容
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expire", 0);
ServletOutputStream out = null;
try {
# Hutool工具包生成验证码(输出图片为png格式)
AbstractCaptcha captcha = CaptchaUtil.createLineCaptcha(200, 100);
captcha.setBackground(new Color(15, 70, 140, 255));
HttpSession session = request.getSession();
session.removeAttribute(KEY_CAPTCHA);
session.setAttribute(KEY_CAPTCHA, captcha.getCode());
out = response.getOutputStream();
captcha.write(out);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}