我正在尝试使用Java servlet从Flash应用程序下载PNG图像。我正在使用这个PHP脚本,它运行得很好,但需要切换到Java servlet。
PHP:
<?php
header('Content-Type: image/png');
header("Content-Disposition: attachment; filename=out.png");
echo base64_decode($_POST["image"]);
?>
我的Java代码:
String image = getRequest().getParameter("image");
String decodedImage = new String(Base64.decode(image));
HttpServletResponse resp = op.getResponse();
resp.setContentType("image/png");
resp.addHeader("Content-Disposition", "attachment;filename=out.png");
resp.getWriter().write(image);
resp.getWriter().flush();
我尝试了两个单独的Base64解码器类,结果相同。解码的base64被写为响应但PNG已损坏。我在HTTP响应头中可以看到的一个区别是Servlet使用“image / png; charset = UTF-8”而PHP脚本只使用“image / png”。
感谢您的帮助!
FIX - 感谢Ignacio Vazquez-Abrams!
resp.setContentType("image/png");
resp.addHeader("Content-Disposition", "attachment;filename=out.png");
resp.getOutputStream().write(image);
resp.getOutputStream().close();
答案 0 :(得分:3)
使用.getOutputStream()
,而不是.getWriter()
。您需要将其作为二进制数据发送。