Java把文件链接转成流,返回给前端下载

背景:已知Java拿到了一个PDF链接(http://xxx.xxx.pdf),直接把链接返给前端的话,前端是不能点击直接下载的,需要后端先把url转成文件流,再由前端下载,处理如下:
导入pom:

xml 复制代码
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.24</version>
        </dependency>

接口部分:

java 复制代码
    @GetMapping("/downloadPdf")
    public void downloadPdf(@RequestParam String patentId, HttpServletResponse response) throws IOException {
        String pdfLink = "http://xxx.xxx.pdf";
        URL url = new URL(pdfLink);
        try (InputStream inputStream = url.openStream();
             PDDocument document = PDDocument.load(inputStream)) {
            // 设置响应头
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "attachment;");

            // 写入响应流
            try (OutputStream outputStream = response.getOutputStream()) {
                document.save(outputStream);
            }
        }
    }

前端部分:

javascript 复制代码
    downloadPDF() {
      let url = baseURL + "/xxx/xxx/downloadPdf?patentId=" + this.patent_id; // 对应后端接口
      console.log(url);
      axios({
        method: 'get',
        url: url,
        responseType: 'blob',	// 不加的话会白页
        headers: {'Authorization': 'Bearer ' + getToken()}
      })
        .then(response => {
          const blob = new Blob([response.data]);
          const url = URL.createObjectURL(blob);
          const link = document.createElement('a');
          link.href = url;
          link.download = `xxx.pdf`;	// 下载的文件名字
          link.click();
        });
    }

这样前端一点击,就能直接下载。

相关推荐
IT_陈寒1 天前
Java中equals方法比了个寂寞?原来这才是正确的重写姿势
前端·人工智能·后端
默_笙1 天前
🚓 分诊台与拆题术:让 RAG 学会判断和规划
前端·javascript
IT枫斗者枫哥1 天前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
CopyCode1 天前
用 AI 迁项目有多爽?我把 Webpack 迁 Vite 的全过程记下来了
前端·架构
去伪存真1 天前
Electron 自动化发布指南:GitHub Actions 跨平台打包全纪录
前端·electron
计算机魔术师1 天前
OpenAI智能体失控闯进美国政府网站,53张用户图片外泄背后
前端
代码方舟1 天前
Java数据工程:利用天远全网运营商三要素优化线上实名认证合规体验
java·人工智能
颜进强1 天前
14 · NestJS ExecutionContext 执行上下文:守卫、拦截器、过滤器拿到的"同一个 context",为什么能力不一样?
前端·后端·ai编程
BBmmo1 天前
我的 Java 学习笔记 · 第 7 篇:泛型与通配符
java
程序员Flycan1 天前
🚀 跨域终结者:前端代理服务器(Proxy)原理解析与配置总结
前端