首页 > 编程语言 >java读取resource下的文件 下载

java读取resource下的文件 下载

时间:2024-02-27 10:47:19浏览次数:32  
标签:java 读取 aLink fileName new resource inputStream response String

点击查看代码
public void downloadKsxxYzyTemplate(HttpServletRequest request, HttpServletResponse response) {
        try {
//            FileDownloadUtils.downloadFileFromResource(response, YZYMB_NAME,YZYMB_URL);
            FileDownloadUtils.downloadFileFromResource(response,
                    "一志愿考生名单导入参考模板.dbf","/template/一志愿考生名单导入参考模板.dbf",
                    request);
        }catch (IOException e) {
            log.error("一志愿考生信息参考模板下载失败:{}",e);
            throw new ServiceException(2,"一志愿考生信息参考模板下载失败");
        }
    }

public static void downloadFileFromResource(HttpServletResponse response,
                                                String fileName,
                                                String classPathResourcePath,
                                                HttpServletRequest request) throws IOException {
        ClassPathResource classPathResource = new ClassPathResource(classPathResourcePath);
        if (!classPathResource.exists()) {
            throw new RuntimeException("找不到源文件!");
        }
        InputStream inputStream = classPathResource.getInputStream();
       /* response.setHeader("Content-Disposition", "attachment;filename=" +
                URLEncoder.encode(fileName, StandardCharsets.UTF_8.displayName()));
        response.setContentType("application/octet-stream");

        OutputStream outputStream = response.getOutputStream();
        IOUtils.copy(inputStream, outputStream);
        outputStream.flush();
//        outputStream.close();
        inputStream.close();*/

//        ClassPathResource classPathResource = new ClassPathResource("/excel/机构导入模板.xlsx");
//        InputStream inputStream = classPathResource.getInputStream();
        //生成目标文件, 上面那种直接读取再输出dbf会打不开文件
        File somethingFile = File.createTempFile("Topic_Template", ".dbf");
        try {
            FileUtils.copyInputStreamToFile(inputStream, somethingFile);
        } finally {
            IOUtils.closeQuietly(inputStream);
        }
        InputStream in = new FileInputStream(somethingFile);
        getFileContent(in, fileName, response, request);

    }

    public static  void getFileContent(InputStream inputStream, String name, HttpServletResponse response, HttpServletRequest request) {
        // 清空response
        response.reset();
        try {
            InputStream in = inputStream;
            response.setHeader("Content-Length", String.valueOf(in.available()));
            byte[] buffer = new byte[in.available()];
            //不加打开会文件损坏
            in.read(buffer);
            in.close();
            String userAgent = request.getHeader("User-Agent");
            /*String fileName;
            if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
                fileName = URLEncoder.encode(name, "UTF-8");
            } else {
                // 非IE浏览器的处理:
                fileName = new String(name.getBytes("UTF-8"), "ISO-8859-1");
            }*/
            response.setHeader("Content-Disposition", "attachment;filename=" +
                    URLEncoder.encode(name, StandardCharsets.UTF_8.displayName()));
            // 设置response的Header
//            response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/x-dbf");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
}

前端:

点击查看代码
exportTemplate = () => {
    const { templateUrl } = this.props;
    certificateTemplate(templateUrl, {},{},(res) => {
        let fileName = res.headers['content-disposition'].split(';')[1].split('filename=')[1];
        const aLink = document.createElement('a');
        document.body.appendChild(aLink);
        aLink.style.display = 'none';
        const objectUrl = URL.createObjectURL(res.data);
        aLink.href = objectUrl;
        aLink.download = decodeURI(fileName);
        aLink.click();
        document.body.removeChild(aLink);
    });

// 模板
export function certificateTemplate(url, params, permission = auth.template,callback) {
    downloadFile(url, params, {headers:{permission}}).then(response=>{
        callback(response);
    }).catch(err=>{
        message.error("文件下载失败"+err);
    })
}

/**
 * add by ych
 * 下载文件,二进制流
 * @param {*} url 接口url
 * @param {*} params 查询参数
 * @param {*} config
 */
export function downloadFile(url, params, config = {}) {
  return new Promise((resolve, reject) => {
    axios
      .post(url, params, { responseType: 'blob', ...config })
      .then(res => {
        resolve(res);
      })
      .catch(err => {
        reject(err.data);
      });
  });
}

标签:java,读取,aLink,fileName,new,resource,inputStream,response,String
From: https://www.cnblogs.com/heavenTang/p/18036384

相关文章

  • C#与Java的继承与实现上的差异
    虽然C#和Java都支持继承和接口实现这两种面向对象编程的基本概念,但它们在一些细节上有一些差异。继承(Inheritance)单继承vs多继承:C#支持单继承,一个类只能直接继承自一个父类。Java也支持单继承,一个类只能直接继承自一个父类。基类构造函数的调用:在C#中,如果......
  • 【13.0】JavaScript之流程控制
    【一】if判断【1】语法//if-elseif(条件){条件成立执行的代码块}else{条件不成立时执行的代码块}//if-elseif-elseif(条件){条件成立执行的代码块}elseif(条件){条件成立执行的代码块}else{条件不成立时执行的代码块}//()条件{}执行的代码块【2】if~e......
  • 【16.0】JavaScript之对象
    【一】对象js中的对象是无序的属性集合我们可以把js中的对象想象成键值对,其中值可以是数据或者函数特征-在对象中属性表示行为-在对象中用方法表示可以看成Python中的字典,但是在JS中的自定义对象要比Python里面的字典操作起来更方便【二】对象创建【1】对象字面量(Objec......
  • 【15.0】JavaScript之函数
    【一】函数函数function,也叫做功能,方法,函数可以将一段代码封装起来,函数就具备了特定的功能函数的作用就是封装一段代码,将来可以重复使用在Python中定义函数需要用def在JavaScript中定义函数需要用function【二】函数声明【1】先声明再调用函数必须先声明,才能......
  • 【14.0】JavaScript之数组
    【一】什么是数组数组是一组有序的数据集合,数组内部可以存放多个数据,不限制数据类型,数组的长度可以动态调整数组类似于Python当中的列表【二】创建数组创建数据的最简单方式是通过字面量vararr=[]也可以通过数组对象去创建vararr=newArray()存放多个......
  • 【18.0】JavaScript之JS事件案例
    【一】开关灯示例<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>.c1{height:400px;width:40......
  • 【17.0】JavaScript之DOM
    【一】什么是DOM/BOM文档对象模型(DocumentObjectModel,简称DOM)浏览器对象模型(BrowserObjectModel,简称BOM)是JavaScript与网页内容及浏览器环境进行交互的两种核心概念。【1】DOM(1)概述文档对象模型(DOM)是一个编程接口,它以树状结构来表示HTML或XML文档。在D......
  • JavaScript 实现JSON 对象数组以某个属性进行分组处理
    JavaScript实现JSON对象数组以某个属性进行分组处理要在JavaScript中对JSON对象数组的某个属性进行分组处理,你可以使用一个对象来存储分组后的结果。下面是一个简单的示例,演示了如何对JSON对象数组中的某个属性进行分组处理:假设我们有一个JSON对象数组,每个对象都有ca......
  • 【10.0】JavaScript之引入
    【一】JavaScript介绍【1】什么是jsjs也是一门编程语言,他可以写后端代码【2】什么是node.js前端由于非常受制于后端,所以有一些人异想天开想要通过js来编写后端代码一统江湖由此开发了一个叫nodejs的工具(支持js跑在后端服务器上)但是并不能完美的实现【3】JavaScript......
  • 学java07数据类型
    基本类型数值类型整数类型:byte(1字节)-128到127;short(2字节)-32768到32767;int(4字节)-2147483648到2147483647;long(要在字数后面加L)(8字节)-9223372036854775808到9223372036854775807浮点类型:float(4字节)(要在字数后面加F);double(8字节)字符类型:char(2字节)单个符号或汉字字符串:string(不......