java思路是什么(java新手代码大全)

今天在一个群里扯了半天的给一个初入职场的新手解释文件下载的问题,在此来总结下。

java思路是什么(java新手代码大全)

文件下载有两种方式:

静态文件下载

静态文件直接下载,设置下响应头即可。

//请求路径dowload
@RequestMapping("dowload")  
public void download(HttpServletResponse rep,String filename){
    //设置响应头的Content-Disposition属性为attachment(附件)
    rep.setHeader("Content-Disposition","attachment;filename="+filename);
}

动态文件下载

需要在下载的业务代码里面动态生成文件对象,然后将文件对象输出到网络输出流中。

比如创建一个xls文件并下载,使用的是easyexcel:

先封装一个私有的方法,将list数据封装在ExcelWriter对象中,写出到网络输出流中。

private void createXls(List list, ServletOutputStream os) throws IOException{
            ExcelWriter writer = new ExcelWriter(os, ExcelTypeEnum.XLSX);
            Sheet sheet1 = new Sheet(1, 0);
            sheet1.setSheetName("合同列表");
            List> data = new ArrayList();
            list.forEach(l -> {
                List item = new ArrayList();
                Optional contractName= Optional.ofNullable(l.getContractName());
                item.add(contractName.orElse(""));
                data.add(item);
            });
            List> head = new ArrayList>();
            List headCoulumn1 = new ArrayList();
            headCoulumn1.add("合同名称");
            head.add(headCoulumn1);
            Table table = new Table(1);
            table.setHead(head);
            writer.write0(data, sheet1, table);
            writer.finish();
}

调用方法

本文转载自:https://www.gylmap.com

public void getxls(String name, String from, String to, HttpServletResponse response){
        if ( "".equals(from)) {
            from = "2022-01-01";
        }
        if ( "".equals(to)) {
            to = LocalDate.now().toString();
        }
        List list = contractMapper.selectContractList(Wrappers.lambdaQuery().like(Contract::getContractName, name)
                .between(Contract::getCreateDate, LocalDate.parse(from), LocalDate.parse(to)).orderByDesc(Contract::getCreateDate));
        String xlsName = from + "至" +to + "-合同列表";
        try {
            response.reset(); // 重点突出
            response.setCharacterEncoding("UTF-8"); // 重点突出
            response.setContentType("application/x-msdownload"); // 不同类型的文件对应不同的MIME类型 // 重点突出
            // 对文件名进行编码处理中文问题
            xlsName = new String((xlsName + ".xlsx").getBytes("GB2312"), "ISO-8859-1");
            // inline在浏览器中直接显示,不提示用户下载,默认
            // attachment弹出对话框,提示用户进行下载保存本地
            response.setHeader("Content-Disposition", "attachment;filename=" + xlsName);
            // 通过response流输出,直接输出到客户端浏览器中。
            ServletOutputStream os = response.getOutputStream();
            createXls(list,os);
            os.flush();
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

另外:

静态文件下载需要服务端保存有下载名称的的磁盘文件,必须是真实存在的,文件的生成、删除需要手动处理。

而动态文件下载我们直接将文件对象流写入到网络输出流中,不必保存文件对象到磁盘中,它存在于内存中,会自动被回收处理。

文件的下载不论是动态还是静态都需要传入服务端一定的参数,参数获取我们通常采用get方式传参(URL传参)。

群里扯了半天的需要是这样的:管理员端生成一个特定条件的xls文件供多用户下载。

1.管理员端生成文件的操作是这样的,选择生成条件,post传递给服务端生成xls文件,在保存前先查询当前是否有此文件存在,如果有则删除后再保存。

2.用户端点击的是一个xxx.xx/getxls?filename=xxx的链接,获取的就是服务端保存的那个最新的文件。

每当管理员端重新设置条件生成xls文件后,用户端获取的都是最新的xls文件,因此这个文件名需要固定写死。

秒鲨号所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈!本站将在三个工作日内改正。
(0)

大家都在看

  • 男性怎么检查(男科检查主要查什么)

    体检对于我们每个人而言都是非常有必要定期去做的一件事情,在体检的时候。男性有哪些必须要做的检查呢?我们一起就这个问题来了解一下吧。 男性体检必做的项目: 1、肺部检查。 因为吸烟的…

    2022年5月11日
  • 游戏加速器推荐(好用的游戏加速器)

    随着互联网的普及和网络技术的不断改进,人们日常在使用电脑进行办公、购物或者是游戏的时候,都需要联网进行。尤其是在玩游戏的时候,很多小伙伴都会在游戏的过程中,发现游戏越玩越卡,越来越…

    2022年7月2日 专栏投稿
  • 仙侠手游排行榜(仙侠手游排行榜前十2020)

    2019好玩的仙侠修仙手游有哪些?相信看过仙侠剧的小伙伴们都很会喜欢仙气飘飘的唯美感,虽然现实中我们不可能修仙,但我们可以在游戏体验一把哦。下面APP178手游网小编给大家推荐几款…

    2022年6月4日 专栏投稿
  • 阿里网盘扩容(阿里云盘收费标准)

    我本身没有经常使用云盘的习惯,前几天因为工作需要,下载了存在百度云盘的几个远古文件,文件很大,下载却很慢,等待期间真的很煎熬,正好听说阿里云盘正在公测,顺便尝试了一下,做一个简单的…

    2022年6月28日 专栏投稿
  • 小孩多少牙(中班幼儿牙齿数量)

    孩子8个月才2颗牙,辅食怎么加更合适? 孩子到多大能长齐20颗牙呢? 如果8个月才2颗牙,这是正常的,添加辅食怎么添加呢?有一些家长,孩子4个月就开始吃面条、粉条或硬质的食物,这样…

    2022年5月24日 专栏投稿
  • 国际版qq和QQ有什么区别(免费跨国聊天app推荐)

    想要手机QQ多开?想要一个纯净简洁版的手机QQ?那你不妨试试手机QQ国际版。 国际版手机QQ近日迎来了更新,那么新版的国际版QQ有何特色?是否风格大变?让我们一起来看看! 能与普通…

    2022年3月19日 专栏投稿
  • 小米截图怎么截图(小米下滑控制中心怎么设置)

    对于手机而言,截屏是我们经常用到的一个功能。不过,不同品牌的手机都有自己的截屏方式,而且方式众多,以小米手机为例,在最新版的MIUI 12.5系统下,就包含了多种截图方式,下面就一…

    2022年4月15日 专栏投稿
  • 李宁收盘大涨11%,李宁称新疆是重要原材料产地!

    在H&M、耐克等企业抵制新疆棉花引发众怒后,中国体育品牌李宁公司3月25日股价大涨近11%。今天早些时候,李宁公司曾回应称新疆是其供应链体系中重要的原材料产地之一。 25日…

    2022年3月19日
  • 大疆怎么样(大疆厂做普工怎么样)

    口袋灵眸又有新升级啦 作为大疆的一员,经常会被人问到:在大疆上班是不是真的和传言中的一样,上班时间随便飞飞机,水果零食吃到吐,加班加到飞起? 为了满足大家的好奇心,今天就拍了一个 …

    2022年4月28日 专栏投稿
  • 怎么设置超链接(word文档超链接到某个位置)

    大家好,今天跟大家分享如何为Word文档中的文本添加超链接。 为文本添加超链接以后,可以快速跳转到链接的网页。比如在下图文档中,我们按住ctrl键单击已经添加好超链接的文本“成都大…

    2022年4月26日 专栏投稿
品牌推广 在线咨询
返回顶部