读取csv文件并下载到本地

从服务器读取指定名称的文件,并下载到本地(默认在计算机的“下载”目录中)

前端 easyui表格的操作按钮列

	  // 列表编辑按钮
    function operation(value, row) {
        if(row.runStep == 'finish'){
            if(row.exportStatus == true){
                return "<a class=\"btn btn-success btn-xs\" href=\"${basePath}/dm/exportFileLog/downloadFile?id="+row.id+"\" ><i class=\"fa fa-cog\"></i>下载</a>";
            }if(row.exportStatus == false){
                return "<a class=\"btn btn-magenta btn-xs\" href=\"javascript:sensitiveReportPage()\" ><i class=\"fa fa-cog\"></i>涉敏报告</a>";
            }
        }if(row.runStep == 'fail'){
            return "<a class=\"btn btn-danger btn-xs\" href=\"javascript:errorLogPage()\" ><i class=\"fa fa-file-text-o\"></i>失败日志</a>";
        }else{
            return "-";
        }
    }
	

后端下载方法

    /**
     * 下载文件
     * @param id
     * @param response
     * @return
     */
    @RequestMapping("downloadFile")
    public Object downloadFile(Integer id,HttpServletResponse response){
        byte[] buffer = new byte[1024];
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        try {
            BdpExportFileLogPo po = exportFileLogService.getById(id);
            String fileName = po.getFileName()+".csv";
            File file = new File(po.getFilePath()+fileName);
           

            // 读取字符编码
            String utf = "UTF-8";

            // 设置响应
            response.setContentType("application/ms-txt.numberformat:@");
            response.setCharacterEncoding(utf);
            response.setHeader("Pragma", "public");
            response.setHeader("Cache-Control", "max-age=30");
            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, utf));

            fis = new FileInputStream(file);
            bis = new BufferedInputStream(fis);

            OutputStream os = response.getOutputStream();
            os.write(new   byte []{( byte ) 0xEF ,( byte ) 0xBB ,( byte ) 0xBF });
            int i = bis.read(buffer);
            while (i != -1) {
             //加上UTF-8文件的标识字符,解决excel打开时中文乱码问题。
                
                os.write(buffer, 0, i);
                i = bis.read(buffer);
            }
        }catch (Exception e){
            logger.error("文件导出失败",e);
        }finally {
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return null;
    }

实现效果

点击【下载】按钮,在页面下方显示下载进度,并在“下载”目录中生成文件。
在这里插入图片描述

在这里插入图片描述

特别注意

下载后的 csv 文件用 WPS 可以正常打开,但是在用 excel 打开时,就会出现中文乱码。写出文件时加上一下内容即可解决。参考文章

 //加上UTF-8文件的标识字符,解决excel打开时中文乱码问题
 os.write(new   byte []{( byte ) 0xEF ,( byte ) 0xBB ,( byte ) 0xBF });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值