当前位置:首页 > 谈天说地

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

34资源网2021-12-06831

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

文件下载有两种方式:

静态文件下载

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

//请求路径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<Contract> list, ServletOutputStream os) throws IOException{
            ExcelWriter writer = new ExcelWriter(os, ExcelTypeEnum.XLSX);
            Sheet sheet1 = new Sheet(1, 0);
            sheet1.setSheetName("合同列表");
            List<List<String>> data = new ArrayList<>();
            list.forEach(l -> {
                List<String> item = new ArrayList<>();
                Optional<String> contractName= Optional.ofNullable(l.getContractName());
                item.add(contractName.orElse(""));
                data.add(item);
            });
            List<List<String>> head = new ArrayList<List<String>>();
            List<String> headCoulumn1 = new ArrayList<String>();
            headCoulumn1.add("合同名称");
            head.add(headCoulumn1);
            Table table = new Table(1);
            table.setHead(head);
            writer.write0(data, sheet1, table);
            writer.finish();
}

调用方法

public void getxls(String name, String from, String to, HttpServletResponse response){
        if ( "".equals(from)) {
            from = "2020-01-01";
        }
        if ( "".equals(to)) {
            to = LocalDate.now().toString();
        }
        List<Contract> list = contractMapper.selectContractList(Wrappers.<Contract>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文件,因此这个文件名需要固定写死。

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/2894.html

分享给朋友:

相关文章

自动回复的经典句子,这11句值得收藏

自动回复的经典句子,这11句值得收藏

1、什么风把您吹来了,是timi赢了么。…

g系列cpu性能排行(英特尔u系列和g系列)

g系列cpu性能排行(英特尔u系列和g系列)

去年10月,AMD正式发布Zen 3架构锐龙5000系列处理器,单线程和多线程性能实现“质”的飞跃,反超当时的10代酷睿处理器,与后来发布的11代酷睿处理器相比,也丝毫不落于下风。 在这样的大前提下,AMD于4月发布了Zen 3架构锐龙5…

融资丨「镭昱半导体」获千万美元Pre-A轮融资,全彩Micro-LED微显示芯片助力元宇宙发展

融资丨「镭昱半导体」获千万美元Pre-A轮融资,全彩Micro-LED微显示芯片助力元宇宙发展

创业邦获悉,近日,镭昱半导体(Raysolve)宣布完成千万美元Pre-A轮融资,由高榕资本领投,耀途资本跟投,泰合资本担任独家财务顾问。至此,在短短半年内,镭昱半导体完成两轮融资,累计获得投资近亿元人民币。本轮融资将用于公司的全球首款标准…

一周涨粉几百万,“张同学”凭什么火?

一周涨粉几百万,“张同学”凭什么火?

编者按:本文来自微信公众号时趣研究院(ID:SocialTouch2020),作者:时有趣,创业邦经授权转载 在最近的一段时间里,名叫“张同学”的博主刷屏了抖音,相关话题频频登上热榜,甚至还得到了人民网的点评。 张同学第一个视频的发布日期…

裁员,爱奇艺穿越生死线

裁员,爱奇艺穿越生死线

图源:摄图网 编者按:本文来自微信公众号霞光社(ID:Globalinsights)),作者:麻吉、郭照川、韩夏,创业邦经授权转载 霞光社从多位爱奇艺员工处了解到,本轮裁员罕见覆盖了爱奇艺所有部门,从影业、IP、游戏、电商部门,甚至到经纪公…