首页 > 解决方案 > 从 java servlet 下载时文件损坏

问题描述

我在 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();
}

标签: javaservlets

解决方案


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

使用响应输出流

并且不要一个字节一个字节地读写,尤其是从一个FileInputStream. 只需使用Files.copy()


推荐阅读