JAVA打包xml成zip保存在服务器任意位置,并能在页面进行点击下载
来源:互联网 发布:mac编辑hosts文件 编辑:程序博客网 时间:2024/06/06 03:06
这几天做了个前台点击查询后,将后台查询的xml进行打包,形成zip(可存在服务器任意位置),并在前台页面可以点击下载进行下载:
打包代码:
public String savexml(List<Map> list) throws IOException{int i;Calendar c = Calendar.getInstance(); String year = c.get(Calendar.YEAR)+""; String month = c.get(Calendar.MONTH)+1+""; String date = c.get(Calendar.DATE)+""; String hour = c.get(Calendar.HOUR_OF_DAY)+""; String minute = c.get(Calendar.MINUTE)+""; String second = c.get(Calendar.SECOND)+""; String data = year+month+date+hour+minute+second; //首先生成一个文件夹,存放此次查询获得的xml; String path = this.getClass().getResource("/").getPath(); System.err.println(path); File file = new File("F:\\xml\\"+data+""); file.mkdirs();String filename = null;String xmlcontent = null;//将查询获得的xml依次存放入此文件夹中;Map map = new HashMap();for(i=0;i<list.size();i++){map = list.get(i);//System.err.println(map);if(map.get("FILENAME")!=null){filename=map.get("FILENAME").toString();}if(map.get("XMLCONTENT")!=null){xmlcontent=map.get("XMLCONTENT").toString();}FileWriter fw = new FileWriter("F:\\xml\\"+data+"\\"+filename+"");//System.out.println("~~~~~~~"+xmlcontent);fw.write(xmlcontent);fw.flush();fw.close();} String sourceFilePath = "F:\\xml\\"+data+""; String zipFilePath = "F:\\xml\\"+data+""; String fileName = data;boolean flag = fileToZip(sourceFilePath, zipFilePath, fileName); if(flag){ System.out.println("文件打包成功!"); }else{ System.out.println("文件打包失败!"); } return zipFilePath+"\\"+fileName;}/** * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下 * @param sourceFilePath :待压缩的文件路径 * @param zipFilePath :压缩后存放路径 * @param fileName :压缩后文件的名称 * @return */ public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName){ boolean flag = false; File sourceFile = new File(sourceFilePath); FileInputStream fis = null; BufferedInputStream bis = null; FileOutputStream fos = null; ZipOutputStream zos = null; if(sourceFile.exists() == false){ System.out.println("待压缩的文件目录:"+sourceFilePath+"不存在."); }else{ try { File zipFile = new File(zipFilePath + "/" + fileName +".zip"); if(zipFile.exists()){ System.out.println(zipFilePath + "目录下存在名字为:" + fileName +".zip" +"打包文件."); }else{ File[] sourceFiles = sourceFile.listFiles(); if(null == sourceFiles || sourceFiles.length<1){ System.out.println("待压缩的文件目录:" + sourceFilePath + "里面不存在文件,无需压缩."); }else{ fos = new FileOutputStream(zipFile); zos = new ZipOutputStream(new BufferedOutputStream(fos)); byte[] bufs = new byte[1024*10]; for(int i=0;i<sourceFiles.length;i++){ //创建ZIP实体,并添加进压缩包 ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName()); zos.putNextEntry(zipEntry); //读取待压缩的文件并写进压缩包里 fis = new FileInputStream(sourceFiles[i]); bis = new BufferedInputStream(fis, 1024*10); int read = 0; while((read=bis.read(bufs, 0, 1024*10)) != -1){ zos.write(bufs,0,read); } } flag = true; } } } catch (FileNotFoundException e) { e.printStackTrace(); throw new RuntimeException(e); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } finally{ //关闭流 try { if(null != bis) bis.close(); if(null != zos) zos.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } } return flag; }
下载代码:controller:
@RequestMapping(value = "/upload", method = RequestMethod.GET)public void exportZip(HttpServletRequest request, HttpServletResponse response) {String path = request.getQueryString();path = path.substring(5);path = path.replaceAll(";", "\\\\"); File file = new File(path);// path是根据日志路径和文件名拼接出来的 String filename = file.getName();// 获取日志文件名称 response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data"); response.setHeader("Content-Disposition", "attachment;fileName=" + filename); try { //打开本地文件流 InputStream inputStream = new FileInputStream(path); //激活下载操作 OutputStream os = response.getOutputStream(); //循环写入输出流 byte[] b = new byte[2048]; int length; while ((length = inputStream.read(b)) > 0) { os.write(b, 0, length); } // 这里主要关闭。 os.close(); inputStream.close(); } catch (Exception e){ e.printStackTrace(); }}
前台页面JS:
function query(){var areacode=$('#areacode').textbox('getValue');var rectype=$('#rectype').textbox('getValue');var filename=$('#filename').textbox('getValue');var bdcdyh=$('#bdcdyh').textbox('getValue');var kjjd=$("#kjjd").is(":checked");var page = $("#mylist").datagrid("options").pageNumber;var rows = $("#mylist").datagrid("options").pageSize;var status = $("#status option:selected").attr("value");para = { page : page, rows : rows, areacode : areacode, rectype : rectype, filename : filename, bdcdyh : bdcdyh, kjjd : kjjd , status : status};$("#mylist").datagrid({url : "../common/loglist/",method : 'get',queryParams : para,rownumbers : true,fitColumns : true,pagination : true,pageSize:100, height:screen.availHeight-155,pageList : [ 100, 150, 200, 400, 500 ],onLoadSuccess:function(data){data.urls = data.urls+".zip";var path = data.urls.replace(/\\/g,';');$("#export").attr("href","../common/upload?path="+path)}});}
有几点需要注意:
①我是将文件位置传给了后台,但是文件名是:F:/XXX/XX.zip;但是浏览器会将/字符当成转义字符,在这里卡住了好久才明白哪里错了。于是我在前台将 / 替换成了;然后再传给后台;
②后台一定要写response属性啊:
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName=" + filename);
这三句话如果不加上,浏览器会出现自行编译,可能会出现前台response错误;
③下载的时候,直接a标签链接服务器接口地址!
0 0
- JAVA打包xml成zip保存在服务器任意位置,并能在页面进行点击下载
- 如何在jsp页面下载后台服务器返回的数据并保存为txt格式
- 在C#中在服务器上打包压缩文件,并下载
- 在任意位置点击图片显示
- java 将多个文件打包成一个zip后进行下载
- java实现文件自动打包成zip并下载…
- ###页面如何能保持在点击位置而不回到页面顶部?
- [Java Web]服务器获取远程文件并Zip打包给客户端下载
- 打包zip文件并下载
- java成打包成exe-在任意windows上运行
- Java实现文件自动打包成zip并下载的代码
- Java实现文件自动打包成zip并下载的代码
- spring mvc java 把多文件打包成zip,并下载
- spring mvc java 把多文件打包成zip,并下载
- 通过position属性实现文本在页面中的任意位置
- 在Asp.Net中如何将从SQL读出来的表转化成XML文件并保存在指定的位置中用C#
- 页面刷新新后让页面停留在原来点击的位置
- 使用POI生成Excel并进行流下载(不需在服务器上保存)
- 复选框 单选框 样式
- selenium操作隐藏的元素
- kafka : Error UNKNOWN_MEMBER_ID occurred while committing offsets for group alert
- 自定义View添加到Viewgroup中layoutparams为空的记录
- Java基础学习总结(104)——多线程、并发、工具类相关的面试题
- JAVA打包xml成zip保存在服务器任意位置,并能在页面进行点击下载
- 以太网安全之企业网络的西电捷通TLSec解决方案
- C++浅拷贝与深拷贝的问题解析
- Mongodb笔记
- sql 判断某列是小数
- Python学习笔记(五)—集合(set)
- 关于性能优化的那点事——BigRender首屏渲染优化
- 一天搞定CSS:表单(form)--20
- Windows环境Git服务器搭建