java压缩下载(带excel和图片)

@RequestMapping(value = "/meter/fault/exportFault")
@ResponseBody
public void exportFault(HttpServletRequest request,
HttpServletResponse response,Fault fault)
throws UnsupportedEncodingException {
List<String> files=new ArrayList<String>();
String resultPath="";
String curTime=DateUtil.toString(new Date(), "yyyyMMddHHmmss");
//在服务端创建文件夹
if("".equals(realPath)) {
realPath = request.getSession().getServletContext().getRealPath("");
}
resultPath=realPath +"/UploadFile/temp/"+ThreadVariable.getUser().getName()+"/"+curTime;
File file = new File(resultPath);
if(!file.exists()){
file.mkdirs();
}
FaultExcel faultExcel = new FaultExcel();
String[] headers = {"区册","户号","户名","表号","地址","故障类型","故障描述","抄表日期","抄表员","照片"};
/*以上为获得表格表头*/
String filename = "故障记录"
+ DateUtil.toString(new Date(), "yyyyMMdd");
response.setContentType("octets/stream");
response.addHeader("Content-Disposition", "attachment;filename="
+ URLEncoder.encode(filename, "UTF-8") + ".xls");
List<List<Object>> dataset = new ArrayList<List<Object>>();
try {
/*以下为获得表单内容*/
//先获得符合条件的员工基本信息
List<Fault> basics=faultService.getFalutForExport(fault);
if(null!=basics){
for (Fault cbasic: basics) {
List<Object> dataList = new ArrayList<Object>();
if(null!=cbasic.getMeter().getArea()){
dataList.add(cbasic.getMeter().getArea().getName());
}else{
dataList.add("");
}
dataList.add(cbasic.getMeter().getAccountno());
dataList.add(cbasic.getMeter().getAccountname());
dataList.add(cbasic.getMeter().getMeterno());
dataList.add(cbasic.getMeter().getAdress());
dataList.add(cbasic.getFaulttypeName());
dataList.add(cbasic.getDescription());
dataList.add(cbasic.getCopydate());
dataList.add(cbasic.getCopyuserName());
List<FaultImg> imgs=cbasic.getImgs();
for (FaultImg faultImg : imgs) {
String[] arr=faultImg.getFilepath().split("/");
files.add(faultImg.getFilepath());
dataList.add(arr[arr.length-1]);
}
dataset.add(dataList);
}
}
addFiles(files,response,resultPath+"/imgs");
OutputStream out = new FileOutputStream(resultPath+"/"+filename+".xls");
faultExcel.exportExcel("故障记录", headers, dataset, out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
//将服务器上存放Excel的文件夹打成zip包
zipFilesDiGui(resultPath,resultPath+".zip");
//弹出下载框供用户下载  
this.downFile(response,realPath +"/UploadFile/temp/"+ThreadVariable.getUser().getName()+"/", curTime+".zip");
// 将存放在服务器上的temp文件删除掉
File deleteFile=new File(realPath +"/UploadFile/temp");
if(deleteFile.exists()){
deleteFile(deleteFile);
}
}
private void addFiles(List<String> files, HttpServletResponse response,
String resultPath){
//查出当前用户的附件
File file = new File(resultPath);
if(!file.exists()){
file.mkdirs();
}
OutputStream out = null;
try {
for (String url : files) {
File f = new File(realPath + url);
if (f.exists()) {
String filename=url.split("/")[url.split("/").length-1];
out = new FileOutputStream(resultPath+"/"+filename);
response.reset();
response.setHeader(
"Content-Disposition",
"attachment; filename="
+ URLEncoder.encode(filename,
"UTF-8"));
response.setContentType("application/octet-stream; charset=utf-8");
out.write(FileUtils.readFileToByteArray(f));
out.flush();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally{
if(null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void zipFilesDiGui(String source,String destinct) {
List fileList=loadFilename(new File(source));
try {
ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(new File(destinct)));
byte[] buffere=new byte[8192];
int length;
BufferedInputStream bis;
for(int i=0;i<fileList.size();i++) {
           File file=(File) fileList.get(i);
           zos.putNextEntry(new ZipEntry(getEntryName(source,file)));
           bis=new BufferedInputStream(new FileInputStream(file));
           
           while(true) {
               length=bis.read(buffere);
               if(length==-1) break;
               zos.write(buffere,0,length);
           }
           bis.close();
           zos.closeEntry();
       }
       zos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private String getEntryName(String base, File file) {
File baseFile=new File(base);
        String filename=file.getPath();
        if(baseFile.getParentFile().getParentFile()==null)
        return filename.substring(baseFile.getParent().length());
        return filename.substring(baseFile.getParent().length()+1);
}
private List loadFilename(File file) {
List filenameList=new ArrayList();
        if(file.isFile()) {
            filenameList.add(file);
        }
        if(file.isDirectory()) {
            for(File f:file.listFiles()) {
                filenameList.addAll(loadFilename(f));
            }
        }
        return filenameList;
}
private void deleteFile(File deleteFile) {
if(deleteFile.isDirectory()){
String[] child=deleteFile.list();
for(int i=0;i<child.length;i++){
deleteFile(new File(deleteFile, child[i]));
}
}
deleteFile.delete();
}
public void downFile(HttpServletResponse response,String serverPath, String str) {    
        try {    
            String path = serverPath +"/"+ str;    
            File file = new File(path);    
            if (file.exists()) {    
                InputStream ins = new FileInputStream(path);    
                BufferedInputStream bins = new BufferedInputStream(ins);// 放到缓冲流里面    
                OutputStream outs = response.getOutputStream();// 获取文件输出IO流    
                BufferedOutputStream bouts = new BufferedOutputStream(outs);    
                response.setContentType("application/x-download");// 设置response内容的类型    
                response.setHeader(    
                        "Content-disposition",    
                        "attachment;filename="    
                                + URLEncoder.encode(str, "GBK"));// 设置头部信息    
                int bytesRead = 0;    
                byte[] buffer = new byte[8192];    
                 //开始向网络传输文件流    
                while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {    
                   bouts.write(buffer, 0, bytesRead);    
               }    
               bouts.flush();// 这里一定要调用flush()方法    
                ins.close();    
                bins.close();    
                outs.close();    
                bouts.close();    
            } else {    
                System.out.println("没有找到文件哎!");
            }    
        } catch (IOException e) {    
            e.printStackTrace();  
        }    
    } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值