全栈程序员 2023-10-31 13:20
浏览 0
已结题

java 后端流直接打开下载浏览器下载保存重命名

后端

  • 要将Java后端生成的PDF流直接打开并下载时,可以使用以下代码:

    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import javax.servlet.http.HttpServletResponse;
    import com.lowagie.text.Document;
    import com.lowagie.text.DocumentException;
    import com.lowagie.text.pdf.PdfWriter;
    public class PdfGenerator {
      public static void generatePdf(HttpServletResponse response) throws IOException, DocumentException {
          // 创建一个字节数组输出流
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
          // 创建PDF文档
          Document document = new Document();
          PdfWriter.getInstance(document, baos);
    
          // 打开文档
          document.open();
    
          // 添加内容到文档
          document.add(/* 添加你的PDF内容 */);
    
          // 关闭文档
          document.close();
    
          // 设置响应头
          response.setHeader("Content-Disposition", "inline; filename=execute.pdf");
          response.setContentType("application/pdf");
    
          // 将PDF流写入响应输出流
          response.getOutputStream().write(baos.toByteArray());
          response.getOutputStream().flush();
      }
    }
    
  • 在上述代码中, generatePdf 方法接收一个 HttpServletResponse 对象作为参数,用于将生成的PDF流写入响应输出流中。通过设置响应头的 Content-Dispositioninline; filename=execute.pdf ,可以指定浏览器直接打开PDF文件,并将文件名设置为 execute.pdf 。最后,将PDF流写入响应输出流并刷新。

    前端

  • 前端可以使用iframe 的方式直接展示

    注意

  • post请求通过打开新浏览器页签的方式没有问题

  • post请求的时候浏览器自带的下载或者保存的时候文件名称无法响应后端的filename,需要用get请求

img

测试代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script type="text/javascript" src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js">
  </script>
  <script type="text/javascript">
  </script>
</head>

<body>

  <div id="form-div1">
    <form id="form1" action="http://127.0.0.1:8000/download" method="get" target="iframe1">
      连接名:<input value="1" type="text" name="column1" /><br>
      连接名:<input value="2" type="text" name="column2" /><br>
      连接名:<input value="3" type="text" name="column3" /><br>
      <input type="submit" value="提交">
    </form>
    <iframe style="width: 800px;height: 600px;" id='previewPdf1' name="iframe1"></iframe>
  </div>


  <div id="form-div2">
    <form id="form2" action="http://127.0.0.1:8000/download" method="get" target="_blank">
      连接名:<input value="1" type="text" name="column1" /><br>
      连接名:<input value="2" type="text" name="column2" /><br>
      连接名:<input value="3" type="text" name="column3" /><br>
      <input type="submit" value="提交">
    </form>
  </div>

  <div id="form-div3">
    <iframe style="width: 800px;height: 600px;" id='previewPdf2' name="iframe2"
      src="http://127.0.0.1:8000/download?column1=1&column2=2&column3=3"></iframe>
  </div>


</body>

</html>
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月8日
    • 创建了问题 10月31日

    悬赏问题

    • ¥15 Coze智能助手搭建过程中的问题请教
    • ¥15 12864只亮屏 不显示汉字
    • ¥20 三极管1000倍放大电路
    • ¥15 vscode报错如何解决
    • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
    • ¥15 python随机森林对两个excel表格读取,shap报错
    • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
    • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
    • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
    • ¥15 VFP如何使用阿里TTS实现文字转语音?