最近项目上要求实现导出excel并根据条数做分割,然后将分割后的多个excel打包成压缩包上传到oss服务器上,然后提供下载方法,具体代码如下:这里只展示部分代码,获取数据的代码就不展示了

ByteArrayOutputStream zipos = new ByteArrayOutputStream(61858764);//设置大小为60M
ZipOutputStream zos = new ZipOutputStream (zipos) ;//创建压缩流,初始化一个输出流缓存区
for(Entry<String, JSONObject> entry : mapData.entrySet()){
String key = entry.getKey();
JSONObject jsonVal = entry.getValue();
OrderMonitorExcelViewSvc orderMonitorExcelView = new OrderMonitorExcelViewSvc(jsonVal);
try {
orderMonitorExcelView.outputToFile("orderMonitorExport_"+key);
} catch (Exception e1) {
logger.info(e1);
}
HSSFWorkbook workbook = orderMonitorExcelView.getWorkbook();
ByteArrayOutputStream os = new ByteArrayOutputStream(61858764);//设置大小为60M
try {
workbook.write(os);
//创建一个压缩文件里的名称
ZipEntry zipEntry = new ZipEntry("订单监控查询"+key+".xls");
System.out.println(os.size());
zipEntry.setSize(os.size());
zipEntry.setCompressedSize(os.size());
zos.putNextEntry(zipEntry);
os.writeTo(zos);
zos.closeEntry();
os.close();
} catch (IOException e) {
logger.info("写入ZipOutputStream异常");
}
}
try {
zos.close();//注意关闭流的顺序,在上传oss之前必须关闭流否则下载解压的时候会报“文件末端错误”的问题
zipos.close();
ByteArrayInputStream zipis = new ByteArrayInputStream(zipos.toByteArray());
@SuppressWarnings("deprecation")
int rel = cpsdCoralStorage.uploadFile("order_monitor_data/"+batchno,zipis);
if(rel==0){
orderMonitorDao.updateDownloadBatch("0", batchno);
}
zipis.close();
} catch (IOException e) {
logger.info("上传oss失败");
logger.info("关闭压缩流异常"+e);
}

下载方法:

@RequestMapping(value = { "downloadExport" })
public void downloadExport(HttpServletRequest request, HttpServletResponse response,
@RequestParam(value = "batchno", required = true) String batchno) throws IOException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String formatDate = sdf.format(new Date());
String pathName = "order_monitor_data/" + batchno;
String srcFileName = "导出结果" + formatDate + ".zip";
InputStream is = cpsdCoralStorage.downloadFile(pathName);
try {
response.setHeader("content-disposition",
"attachment;filename=" + URLEncoder.encode(srcFileName, "utf-8"));
OutputStream out = response.getOutputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int temp =0;
while((temp=is.read())!=-1){ // 读取内容
baos.write(temp);
}
byte[] xlsBytes = baos.toByteArray();
out.write(xlsBytes);
out.flush();
out.close();
}
catch (FileNotFoundException e) {
logger.logException(e);
}
catch (IOException e) {
logger.logException(e);
}
}

本次分享主要是因为之前导出都是先存一个文件,需要找一个存储目录,这样发布到生产环境会有各种问题,还需要看文件夹是否有读写权限,我用的这个方法是直接设置一个存储流,直接对流进行操作,省去了这些麻烦!

java导出excel并且压缩成zip上传到oss,并下载,使用字节流去存储,不用文件流保存文件到本地的更多相关文章

  1. c#上传文件(二)使用文件流保存文件

    1.html代码: <asp:FileUpload runat="server" ID="UpLoadFile"/> <asp:Button ...

  2. springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux

    //我的会员中心 头像上传接口 /*windows 调试*/ @Value("${appImg.location}") private String winPathPic; /*l ...

  3. java 实现Excel压缩成Zip导出

    1 概述 在web项目中常见的一种场景就是将文件导出为Excel,但是当需要导出多个Excel时,使用者将频繁操作,这样就严重降低了项目的友好交互性以及易用性,那么怎么才能优雅的解决这个问题呢?笔者今 ...

  4. Java实现将文件或者文件夹压缩成zip

            最近碰到个需要下载zip压缩包的需求,于是我在网上找了下别人写好的zip工具类.但找了好多篇博客,总是发现有bug.因此就自己来写了个工具类.         这个工具类的功能为: ( ...

  5. 【转】Java实现将文件或者文件夹压缩成zip

    转自:https://www.cnblogs.com/zeng1994/p/7862288.html package com.guo.utils; import java.io.*; import j ...

  6. java实现将文件压缩成zip格式

    以下是将文件压缩成zip格式的工具类(复制后可以直接使用): zip4j.jar包下载地址:http://www.lingala.net/zip4j/download.php package util ...

  7. asp.net 把图片压缩成zip之后再进行下载

    //这是导出的js方法 function fundaochu() { var data = "keyword=GetImageListdaochu&type=daochu&m ...

  8. java导出excel报错:getOutputStream() has already been called for this response

    对于java导出excel报错的问题,查了很多都说是在使用完输出流以后调用以下两行代码即可 out.clear(); out = pageContext.pushBody(); 但这也许是页面上输出时 ...

  9. java导出excel表格

    java导出excel表格: 1.导入jar包 <dependency> <groupId>org.apache.poi</groupId> <artifac ...

随机推荐

  1. Java学习的第三天

    1.今天学了main函数具体的解读如 main函数关键字的意义 变量命名 2.在2.1当中的cmd命令实施失败,文件路径没有找到. 3.明天学习变量范围和注释阅读大道至简.

  2. yii中的andFilterWhere使用说明

    当 WHERE 条件来自于用户的输入时,你通常需要忽略用户输入的空值. 例如,在一个可以通过用户名或者邮箱搜索的表单当中,用户名或者邮箱 输入框没有输入任何东西,这种情况下你想要忽略掉对应的搜索条件, ...

  3. 腾讯开源 APIJSON 连创五个第一

    腾讯第一个码云推荐项目,// 其它最早创建的是 TencentOS-tiny(码云) 2019.8.23 腾讯第一个码云GVP项目,// 其它最早创建的是 TencentOS-tiny(码云) 201 ...

  4. spring源码概览

    阅读spring源码需要具备的基本技能: 1,设计模式(工厂模式,单例模式,代理模式,模板模式,观察者模式,装饰器模式,适配器模式) 2,数据结构和算法(栈,队列,树以及一些基本的算法) 3,反射(如 ...

  5. TextView之富文本

    项目中使用富文本比较常见了,一行显示多种样式颜色的文本,使用 ClickableSpan 富文本实现在同一个 TextView 中的文本的颜色.大小.背景色等属性的多样化和个性化. 我们也可以使用Ht ...

  6. Mysql事物与二阶段提交

     1.事务的四种特性(ACID) 事务可以是一个非常简单的SQL构成,也可以是一组复杂的SQL语句构成.事务是访问并且更新数据库中数据的一个单元,在事务中的操作,要么都修改,要么都不做修改,这就是事务 ...

  7. HashMap 链表插入方式 → 头插为何改成尾插 ?

    开心一刻 一天,楼主在路上碰到了一个很久没见的朋友,找了个餐馆,坐下聊了起来 楼主:在哪上班了 ? 朋友:火葬场啊 楼主:在那上班,一个月多少钱啊 ? 朋友:两万多啊 楼主(不可思议):多少 ? 朋友 ...

  8. 如何删除一台OSD主机

    在ceph的一台OSD主机出现故障的时候,数据可以通过副本的机制进行恢复,之后通过删除osd的操作也能够将故障osd从osd tree当中删除掉,但是故障的 osd 的主机仍然会留在集群当中,通过 c ...

  9. Linux ---搭建SFTP服务器

    在Centos 6.6环境使用系统自带的internal-sftp搭建SFTP服务器. 打开命令终端窗口,按以下步骤操作. 0.查看openssh的版本 ssh -V 使用ssh -V 命令来查看op ...

  10. CSS属性(字体与文本属性)

    1.字体属性 (1)font-family 把要对这个网站要设置的字体都写上,如果这个浏览器支持第一个字体,则会用,如果不支持则会尝试第二个,如果设置的字体系统都不支持则会使用系统默认的字体作为网站的 ...