jsp请求压缩导出txt文件
来源:互联网 发布:win10打开网络无反应 编辑:程序博客网 时间:2024/06/07 12:13
@RequestMapping({ "/productDetailBurn_export.html" })@ResponseBodypublic void productDetailBurn_export(ProductDetailInfo productDetailInfo,HttpServletRequest request, HttpServletResponse response)throws IOException {DbContextHolder.setDbType("isap");ModelAndView modelAndView = new ModelAndView();ProductInfo pro = (ProductInfo) request.getSession().getAttribute("mainProduct");//产品信息if ((pro != null) && (pro.getProductId() != null)) {//获取当前产品绑定用户信息Developer dev = new Developer();dev.setPageNum(0);dev.setPageSize(10);dev.setAcctId(pro.getAcctId());List<Developer> developers = this.developerService.selectDeveloper(dev);Developer developer =developers.get(0);String openid = developer.getOpenId();Integer pageNum = Integer.valueOf(1);if (request.getParameter("pageNum") != null) {pageNum = Integer.valueOf(Integer.parseInt(request.getParameter("pageNum")));}productDetailInfo.setPageNum(Integer.valueOf((pageNum.intValue() - 1) * 10));productDetailInfo.setPageSize(Integer.valueOf(10));List strs = = this.productDetailInfoService.selectProductDetailBurn(productDetailInfo);//导出数据查询Map<String,Object> maps = new HashMap<String,Object>();maps.put("open_id", openid);List<Map<String,Object>> daList = this.developerService.selectDomainNameAddress(maps);//导出数据替换List newStrs = new ArrayList(); //组装用户域名地址信息if(strs.size() > 0 ){StringBuffer sbt = new StringBuffer();String st =null;if(daList.size() > 0 ){sbt.append("hostcnt=").append(daList.size()).append(";");for(int i = 0;i<daList.size();i++){sbt.append("host").append(i+1).append("=").append(daList.get(i).get("domain_name")).append(";");}st = sbt.substring(0, sbt.length()-1);}else{st="hostcnt=3;host1=box1.xcloudlink.com;host2=box2.xcloudlink.com;host3=box3.xcloudlink.com";}for(int j = 0 ;j<strs.size();j++){strs.get(j).toString().replace("host_count_name", st);newStrs.add(strs.get(j).toString().replace("host_count_name", st));}} String spNum = String.valueOf(request.getParameter("splitNumber")); List exList = new ArrayList();//拆分存储数据List ruList = new ArrayList();//存放拆分后数据if(spNum != null && !spNum.equals("")){double splitNumber = Double.valueOf(spNum);//拆分数量double a = newStrs.size();//查询结果总条数double c = a/splitNumber;double d = Math.ceil(c);//每个文件中存放数量 for(int h = 0;h<newStrs.size();h++){exList.add(newStrs.get(h));if(exList.size()== d){String rust = sendProductInfoExport(exList);//list数据拼接成string返回ruList.add(rust);exList.clear();//清除己拆分后集合数据}else if(h == newStrs.size()-1){String rust = sendProductInfoExport(exList);//list数据拼接成string返回ruList.add(rust);exList.clear();//清除己拆分后集合数据}} //循环存储无拆分数据 startStringBuffer write = new StringBuffer();String enter = "\r\n";if (newStrs.size() > 0) {for (int i = 0; i < newStrs.size(); i++) {write.append((String) newStrs.get(i));write.append(enter);}}ruList.add(write.toString());//循环存储无拆分数据 end }else{//循环存储无拆分数据 startStringBuffer write = new StringBuffer();String enter = "\r\n";if (newStrs.size() > 0) {for (int i = 0; i < newStrs.size(); i++) {write.append((String) newStrs.get(i));write.append(enter);}}ruList.add(write.toString());//循环存储无拆分数据 end} response.setContentType("text/plain");String fileName = "devices";try {fileName = URLEncoder.encode("devices", "UTF-8");} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}List filesName = new ArrayList();//文件名String filUrl = "";//文件路径// String url = "c:\\";//指定文件目录String url = "ownerManager/";//自己命名String writePath = "";if(ruList.size() > 0){for(int j = 0;j<ruList.size();j++){response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".txt");BufferedOutputStream buff = null;ServletOutputStream outSTr = null;try {outSTr = response.getOutputStream();buff = new BufferedOutputStream(outSTr);//定义文件名格式并创建 // 5.保存文件到filePath中String realPath = request.getSession().getServletContext().getRealPath("/");//获取项目在容器中的实际发布运行根路径File file1 = new File(realPath+ url.substring(0, url.lastIndexOf("/")));if (!file1.exists())file1.mkdirs();writePath = realPath + url;filUrl = writePath;File txtFile = File.createTempFile(fileName+j, ".txt", new File(writePath)); filesName.add(txtFile);//文件名称FileWriter writer = new FileWriter(txtFile, true); writer.write((String) ruList.get(j)); writer.flush(); writer.close();} catch (Exception e) {e.printStackTrace();} }} //-------------压缩文件start //设置压缩流:直接写入response,实现边压缩边下载//响应头的设置 response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data"); //设置压缩包的名字 //解决不同浏览器压缩包名字含有中文时乱码的问题 String downloadName = "烧入数据导出.zip";//压缩包名 String agent = request.getHeader("USER-AGENT"); try { if (agent.contains("MSIE")||agent.contains("Trident")) { downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8"); } else { downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1"); } } catch (Exception e) { e.printStackTrace(); } response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\""); ZipOutputStream zipos = null; try { zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream())); zipos.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法 } catch (Exception e) { e.printStackTrace(); } //循环将文件写入压缩流 DataOutputStream os = null; for(int i = 0; i < filesName.size(); i++ ){ File file = new File(filesName.get(i).toString()); try { //添加ZipEntry,并ZipEntry中写入文件流 //这里,加上i是防止要下载的文件有重名的导致下载失败 String st = filesName.get(i).toString(); st =st.substring(st.lastIndexOf("\\"), st.length()-4);//windows环境下 //st =st.substring(st.lastIndexOf("/"), st.length()-4);linux环境下 st = st.substring(1, st.length()); zipos.putNextEntry(new ZipEntry(i + st)); os = new DataOutputStream(zipos); InputStream is = new FileInputStream(file); byte[] bs = new byte[100]; int length = 0; while((length = is.read(bs))!= -1){ os.write(bs, 0, length); } is.close(); zipos.closeEntry(); } catch (IOException e) { e.printStackTrace(); } } //关闭流 try { os.flush(); os.close(); zipos.close(); } catch (IOException e) { e.printStackTrace(); } /** * 删除文件 */// for(int h = 0;h<filesName.size();h++){// String st = filesName.get(h).toString();// st = st.substring(3, st.length());// deleteFile(filUrl,st); // } //---------------------------压缩文件end} else {modelAndView.setViewName("redirect:/productinfo/productList.html");//跳转}}/*** 导出烧入数据拆分* 2017-7-12* @param response* @param num* @param newStrs*/public String sendProductInfoExport(List newStrs){String st="";StringBuffer write = new StringBuffer();String enter = "\r\n";try {if (newStrs.size() > 0) {for (int i = 0; i < newStrs.size(); i++) {write.append((String) newStrs.get(i));write.append(enter);}}st = write.toString();} catch (Exception e) {e.printStackTrace();} return st;} /** * 删除该目录filePath下的所有文件 * @param filePath * 文件目录路径 */ public static void deleteFiles(String filePath) { File file = new File(filePath); if (file.exists()) { File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isFile()) { files[i].delete(); } } } } /** * 删除单个文件 * @param filePath 文件目录路径 * @param fileName 文件名称 */ public static void deleteFile(String filePath, String fileName) { File file = new File(filePath); if (file.exists()) { File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isFile()) { if (files[i].getName().equals(fileName)) { files[i].delete(); return; } } } } }
阅读全文
1 0
- jsp请求压缩导出txt文件
- excel@txt 文件导出
- 导出到 txt 文件
- JavaScript导出txt文件
- java导出Txt文件
- Java 导出txt文件
- springMVC 导出.txt文件
- Spring导出txt文件
- php导出txt文件
- 页面导出txt文件
- java导出txt文件
- 数据导出到TXT文件
- 向客户端导出txt 文件
- DTS中导出txt文件
- asp.net 导出txt文件
- asp.net导出txt文件
- ORACLE导出TXT的文件
- 数据导出到TXT文件
- Java_基础—泛型概述和基本使用
- Java内存区域学习记录
- 2017-07-14:加速
- TensorFlow教程 2 TensorFlow基础构架
- ListView中EditText在横竖屏切换中保存数据
- jsp请求压缩导出txt文件
- Android自定义圆形进度条动画一
- Openstack Glance源码架构解析
- 各种优化方法总结比较(sgd/momentum/Nesterov/adagrad/adadelta)
- n a^o7 !——栈
- LruCache源码完全解析
- 百度编辑器UEditor常用设置函数大全
- win 如何在Windows上建立ssh服务器 作者:许腾
- 搭建教育直播平台