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

标签 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 响应 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/

相关文章:

java - Java 可以阻止开放 TCP 端口吗?

java - 单击按钮更改可见性

php - 如何在 Laravel 中使用 PDO 进行 block 更新

javascript - 使用 PHP、websocket 和 MySQL 聊天

javascript - 如何通过jquery从sevlet接收信息而不发送请求

servlets - session cookie Websphere 7 的安全和 HttpOnly 标志

java - 从 POST 请求读取 MultipartContent

java - 如何解决 javax.validation.ValidationException : HV000064: Unable to instantiate ConstraintValidator: in Spring

php - 如何优化缓慢的 MySQL 查询(通过 PHP)

java - jar 没有运行