从Java Servlet下载时文件损坏

时间:2018-07-18 20:20:41

标签: java servlets

我在servlet中有一个进程,该进程创建一个.pdf文件并将其发送给客户端。但是,Adobe不会打开下载的文件(“打开此文档时出错。该文件已损坏,无法修复。”)。驻留在服务器上的原始创建的文件很好,Adobe没问题打开它。

我的代码:

private static void sendFile(HttpServletResponse response, String pdfPath) throws FileNotFoundException, IOException {
    PrintWriter out = response.getWriter();
    File f = new File(pdfPath);

    response.setHeader("Content-Transfer-Encoding", "binary");
    response.setHeader("Content-Disposition", "attachment; filename=\"" + f.getName());
    response.setContentLength((int) f.length());

    response.setContentType("application/pdf");

    FileInputStream fileInputStream = new FileInputStream(pdfPath);

    int i;
    while ((i = fileInputStream.read()) != -1) {
        out.write(i);
    }
    fileInputStream.close();
    out.close();
}

1 个答案:

答案 0 :(得分:3)

Writer写入字符,而不是字节。

使用响应输出流

也不要逐字节读取和写入,特别是从FileInputStream读取和写入字节。这效率极低。只需使用Files.copy()