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

今天在一个群里扯了半天的给一个初入职场的新手解释文件下载的问题,在此来总结下。文件下载有两种方式:静态文件下载静态文件直接下载,设置下响应头即可。//请求路径dowload@RequestMapping(\”dowload\”)

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

文件下载有两种方式:

静态文件下载

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

//请求路径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文件,因此这个文件名需要固定写死。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/57645.html

(0)
nan
上一篇 2021-12-06
下一篇 2021-12-06

相关推荐

  • 赞美大雁的诗句分享(描写大雁的诗句有哪些)

    中国好诗词,风雅颂古今!中国好诗词打造最纯粹的诗词分享平台!品读、鉴赏经典诗词歌赋,分享、交流精美原创文学。不一样的文学阅读体验,不一样的中国传统文化传播。欢迎各位关注,同时也欢迎各位投稿!在中国古代诗词中,鸿雁作为审美对象,具有丰富的美学

    2021-12-16 用户投稿
    0
  • 十大神兽之草泥马(神兽草泥马)

    神兽草泥马(十大神兽之草泥马)草泥马是中国网民恶搞的十大神兽之一。羊驼有与骆驼相似的地方,也有某些和绵羊相仿的特点。羊驼有点像骆驼,例如它的颈较长,蹄子是肉质的,走路的姿态也类同,胃里也有水囊,可以数日不饮水。但它身体较小,背上无肉峰,四肢很细,脸细长,耳尖长,眼睛大而圆,非常清秀,又有点像绵羊了。

    2021-09-09 用户投稿
    0
  • iphone7的机身尺寸(苹果7屏幕尺寸长款多大)

    说起iPhone7,大家第一感觉它已经是苹果家族中淘汰的一员了,近日有几个朋友说自己很是怀念以前的iPhone上下刘加Home键的设计。iPhone7与iPhone11对比Home键的取消代表着一个时代的谢幕,并跨入超高比的全面屏时代,再

    2021-12-07 用户投稿
    0
  • 晚上兼职做什么比较靠谱(适合上班族的副业)

    写几个自己以前实操过的几个小项目吧,完全可以当作副业去做,而且收入也不错。正文开始:一:叫醒服务这个小项目是现在“懒人经济”环境下发展较好的项目。虽然每个人手机上都有闹铃的功能,但是说实话有几个人能被闹铃不烦气一叫就醒,如果有个声音好听长相甜美的妹子

    2021-10-19 用户投稿
    0
  • 淘宝的万相台有什么用?来看具体介绍

    公开资料显示,万相台是阿里妈妈旗下的一站式数智经营操作系统。不少人很是好奇,万相台到底有什么用?其实,这可以从官网中找到答案。如果你也有这样的疑惑,那下面我们一起来具体了解一下。三全是哪个公司的品牌,来看公司最新消息大家都很好奇,三全食品是哪个公司的品牌?公司经营包括哪些方面?跟小编一起去看看吧阿…

    2021-12-21
    0
  • 国产按摩器品牌排名(口碑最好的按摩椅推荐)

    哈喽,我是M慢性子,马上618啦,各种促销接踵而至,也是年中孝敬父母和慰劳自己的好时候,不知道大家有没有自己计划购入的清单呢?相信现在屏幕前的各位,不管是自己,还是父母,都有长期使用电子设备的习惯,加上日常不正确的坐姿,颈椎多少会有点不适,但是因为时

    2022-01-15 用户投稿
    0

发表回复

登录后才能评论