我正在尝试使用 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 响应 header 中看到的一个区别是 Servlet 使用“image/png; charset=UTF-8”,而 PHP 脚本仅使用“image/png”。
感谢您的帮助!
修复 - 感谢 Ignacio Vazquez-Abrams!
resp.setContentType("image/png");
resp.addHeader("Content-Disposition", "attachment;filename=out.png");
resp.getOutputStream().write(image);
resp.getOutputStream().close();
最佳答案
使用 .getOutputStream()
,而不是 .getWriter()
。您需要将其作为二进制数据发送。
关于java - 无法将简单的 PNG 下载脚本从 PHP 转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4472105/