首页 > Java > java教程 > 如何高效地从 Spring 控制器下载生成的 PDF 文件?

如何高效地从 Spring 控制器下载生成的 PDF 文件?

Linda Hamilton
发布: 2024-12-23 18:00:24
原创
756 人浏览过

How to Efficiently Download Generated PDF Files from Spring Controllers?

从 Spring 控制器下载 PDF 文件

背景:

从 Web 应用程序高效下载文件是一个常见的要求。本文解决了从 Spring 控制器下载生成的 PDF 文件的挑战。

生成 PDF 文件:

要生成 PDF 文件,请考虑使用 Freemarker 模板和PDF生成框架如iText。这允许根据用户输入或其他数据动态生成 PDF 内容。

通过控制器下载文件:

要通过 Spring 控制器启用文件下载:

  1. 创建控制器方法:
    创建一个处理下载请求的控制器方法。通常,这涉及使用 @RequestMapping 注释将方法映射到特定的请求路径。例如:

    @RequestMapping(value = "/download/pdf/{fileName}", method = RequestMethod.GET)
    public void downloadPdf(@PathVariable("fileName") String fileName, HttpServletResponse response) {
    ...
    }
    登录后复制
  2. 获取文件数据:
    以InputStream的形式获取PDF数据。这可能涉及调用 PDF 生成逻辑或从存储位置获取文件。
  3. 配置响应:
    设置响应标头以指示文件类型并指定保存的文件名。对于 PDF 文件,请使用:

    response.setContentType("application/pdf");
    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
    登录后复制
  4. 将文件数据复制到响应:
    使用 org.apache.commons.io.IOUtils。 copy 方法将 PDF 数据从输入流传输到响应的输出流:

    IOUtils.copy(inputStream, response.getOutputStream());
    登录后复制
  5. 刷新响应:
    刷新响应以将 PDF 文件发送到客户端。这将启动下载过程。

示例代码:

以下代码片段演示了 PDF 文件下载的控制器方法的实现:

@RequestMapping(value = "/files/{file_name}", method = RequestMethod.GET)
public void getFile(
    @PathVariable("file_name") String fileName, 
    HttpServletResponse response) {
    try {
      // get your file as InputStream
      InputStream is = ...;
      // copy it to response's OutputStream
      IOUtils.copy(is, response.getOutputStream());
      response.flushBuffer();
    } catch (IOException ex) {
      log.info("Error writing file to output stream. Filename was '{}'", fileName, ex);
      throw new RuntimeException("IOError writing file to output stream");
    }

}
登录后复制

以上是如何高效地从 Spring 控制器下载生成的 PDF 文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板