无法将简单的PNG下载脚本从PHP转换为Java

时间:2010-12-17 15:41:36

标签: java php servlets base64

我正在尝试使用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();

1 个答案:

答案 0 :(得分:3)

使用.getOutputStream(),而不是.getWriter()。您需要将其作为二进制数据发送。