首页 > 编程语言 >java使用浏览器请求下载pdf文件

java使用浏览器请求下载pdf文件

时间:2023-04-04 14:56:12浏览次数:37  
标签:outputStream 浏览器 java inputStream pdf null response conn

java使用浏览器请求下载pdf文件

代码

/**
 * 下载pdf文件
 *
 * @param pdfFileUrl 文件地址
 * @param fileName   文件名称
 */
public static void downloadPdf(String pdfFileUrl, String fileName) {

    ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder
            .getRequestAttributes();

    if (null == requestAttributes) {
        throw new RuntimeException("请求失败");
    }
    HttpServletResponse response = requestAttributes.getResponse();

    ServletOutputStream outputStream = null;
    InputStream inputStream = null;

    try {
        // 获取网络文件
        URL urlFile = new URL(pdfFileUrl);
        HttpURLConnection conn = (HttpURLConnection) urlFile.openConnection();
        conn.setRequestMethod("GET");
        conn.setConnectTimeout(5 * 1000);

        // 通过输入流获取图片数据
        inputStream = conn.getInputStream();

        // 文件类型
        response.setContentType("application/pdf");
        // 设置请求头
        response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));

        // 获取输出流
        outputStream = response.getOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while( (len = inputStream.read(buffer)) != -1 ){
            outputStream.write(buffer, 0, len);
        }

        outputStream.flush();
    } catch (Exception e) {
        log.error("【下载PDF文件失败】原因:{}", e.getMessage());
        e.printStackTrace();
    } finally {
        try {
            if (null != inputStream) {
                inputStream.close();
            }
            if (null != outputStream) {
                outputStream.close();
            }
        } catch (Exception ignored) {}
    }
}

随便写个控制器调用该方法...启动(方法省略)

打开浏览器访问你写的方法

标签:outputStream,浏览器,java,inputStream,pdf,null,response,conn
From: https://www.cnblogs.com/zjh0420/p/17286366.html

相关文章

  • JavaScript:数组删除指定元素
    1.shift()方法用于删除数组中的第一个元素。注:此方法会改变数组的长度letarr=[1,2,3]arr.shift()//删除1//arr为[2,3]2.pop()方法用于删除数组中最后一个元素注:此方法会改变数组的长度letarr=[1,2,3]arr.pop();//删除3//arr为[1,2]3.splice()方法用于......
  • java抽象类和接口
    abstract由abstract关键字修饰的类称为抽象类,可以将某些类共有的行为抽象出来,形成约束,提高开发效率。//抽象类publicabstractclassAction{//抽象方法,只有方法名字,没有方法的实现publicabstractvoiddoSth();}抽象类不可以通过new关键字创建实例抽象类中可以有......
  • 使用JAVA实现布隆过滤器
    什么是布隆过滤器布隆过滤器是一种内存友好的数据结构,它可以高效地判断一个元素是否存在于一个集合中,以及大幅减少磁盘/数据库等IO操作。与哈希表和树等数据结构不同,它可以实现非常高的查找速度和存储效率,适用于需要快速并且高效地处理大数据集的场景。布隆过滤器原理布隆过滤......
  • java xxljob 根据参数运行业务
    配置定时任务不启动,手动执行根据传入的参数完成既定的业务 /** *自定义增删除平台酒体数据 *参数:startDate,endDate[yyyy-MM-dd) * *@return{@link*@return:com.xxl.job.core.biz.model.ReturnT<java.lang.String>} *@author:xxx *@date2023/3/12 **......
  • Cadence应用笔记:原理图导PDF
    设置1.打开菜单栏选择打印2.勾选黑白3.选择一个虚拟打印机......
  • 添加pdf水印
    添加pdf水印依赖<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version></dependency>代码/***添加水印**@paramsrcPdfPath文件路径*@paramt......
  • 深入理解 Java 中 SPI 机制
    vivo互联网技术微信公众号 作者:姜柱SPI(ServiceProviderInterface),是JDK内置的一种服务提供发现机制,本文由浅入深地介绍了JavaSPI机制。一、简介SPI(ServiceProviderInterface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如j......
  • 为什么 JavaScript 中 0.1 0.2 不等于 0.3 ?
    vivo互联网技术微信公众号 作者:刘洋在js中进行数学的运算时,会出现0.1+0.2=0.300000000000000004的结果,一开始认为是浮点数的二进制存储导致的精度问题,但这似乎不能很好的解释为什么在同样的存储方式下0.3+0.4=0.7可以得到正确的结果。本文主要通过浮点数的二进制存储及运算,和......
  • Kotlin 协程真的比 Java 线程更高效吗?
    vivo互联网技术微信公众号 作者:吴越网上几乎全部介绍Kotlin的文章都会说Kotlin的协程是多么的高效,比线程性能好很多,然而事情的真相真是如此么?协程的概念本身并不新鲜,使用C++加上内嵌汇编,一个基本的协程模型50行代码之内就可以完全搞出来。早在2013年国内就有团队开源了号称支持......
  • CSDN粘贴图片自动上传到服务器(Java版)
    ​ 如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>......