JavaWeb实现多文件上传及zip打包下载
本文实例为大家分享了javaweb多文件上传及zip打包下载的具体代码,供大家参考,具体内容如下
项目中经常会使用到文件上传及下载的功能。本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分。
首先明确一点:
无法通过页面的无刷新ajax请求,直接发下载、上传请求。上传和下载,均需要在整页请求的基础上实现。项目中一般通过构建form表单形式实现这一功能。
一、多文件上传
项目需求为实现多图片上传功能。参考测试了网上找到的众多插件方法后,决定选用Jquery原始上传方案。以下按步骤贴出具体代码。
1、HTML部分(可省略使用js构建)
上传资料
有几点说明:
1.form中enctype=”multipart/form-data”
2.例中使用标签,构建submit
2、JS部分
varformData=newFormData($("#uploadForm")[0]); formData.append("foldName","datumList");//设置父级文件夹名称 formData.append("oderCode",selfOrderCode); formData.append("datumType",datumType); $.ajax({ type:"POST", data:formData, url:"order/datumList/batchInsertDatumLists", contentType:false, processData:false, success:function(result){ if(result.success){ //清空框文件内容 $("#fileImage").val(""); varobj=document.getElementById('fileImage'); obj.outerHTML=obj.outerHTML; refreshDatumList(); showSuccessToast(result.message); }else{ showWarningToast(result.message); } }, error:function(){ showErrorToast('请求失败!') } });
以上有几点说明:
1.varformData=newFormData($(“#uploadForm”)[0]);
2.使用formData.append(“oderCode”,selfOrderCode);添加其他参数
Java后台
MultipartHttpServletRequestmRequest=(MultipartHttpServletRequest)request; Listfiles=mRequest.getFiles("fileImage");
以上有几点说明:
1.获取MultipartHttpServletRequest,对应file标签的name
二、文件批量下载
本项目中,需求为批量下载某一批次文件。使用zip在服务器压缩文件,之后将文件下载到客户机。
网上查询,使用Java自带的文件输出类不能解决压缩文件中文件名乱码的问题。解决方法:使用ant.jar包,创建压缩文件时,可以设置文件的编码格式,文件名乱码的问题就解决了。
HTML部分(可省略使用js构建)
批量下载
JS部分
//批量下载 functionbatchDatumListDownLoad(){ varparam={}; param.datumType=$("#datumTypeQ").val(); if(param.datumType==-1){ param.datumType=null;//查询所有 } param.orderCode=selfOrderCode; $("#uploadForminput[name=orderCode]").val(param.orderCode); $("#uploadForminput[name=datumType]").val(param.datumType); varform=$("#uploadForm")[0]; form.action="order/datumList/batchDownLoadDatumList"; form.method="post"; form.submit();//表单提交 }
后台部分
publicvoidbatchDownLoadDatumList(DatumListVodatumListVo,HttpServletResponseresponse){ try{ //查询文件列表 ListvoList=datumListService.queryDatumLists(datumListVo); //压缩文件 List files=newArrayList<>(); for(DatumListVovo:voList){ Filefile=newFile(vo.getDatumUrl()); files.add(file); } StringfileName=datumListVo.getOrderCode()+"_"+datumListVo.getDatumType()+".zip"; //在服务器端创建打包下载的临时文件 StringglobalUploadPath=""; StringosName=System.getProperty("os.name"); if(osName.toLowerCase().indexOf("windows")>=0){ globalUploadPath=GlobalKeys.getString(GlobalKeys.WINDOWS_UPLOAD_PATH); }elseif(osName.toLowerCase().indexOf("linux")>=0||osName.toLowerCase().indexOf("mac")>=0){ globalUploadPath=GlobalKeys.getString(GlobalKeys.LINUX_UPLOAD_PATH); } StringoutFilePath=globalUploadPath+File.separator+fileName; Filefile=newFile(outFilePath); //文件输出流 FileOutputStreamoutStream=newFileOutputStream(file); //压缩流 ZipOutputStreamtoClient=newZipOutputStream(outStream); //设置压缩文件内的字符编码,不然会变成乱码 toClient.setEncoding("GBK"); ZipUtil.zipFile(files,toClient); toClient.close(); outStream.close(); ZipUtil.downloadZip(file,response); }catch(Exceptione){ e.printStackTrace(); } }
其中ZipUtil.java
/** *压缩文件列表中的文件 * *@paramfiles *@paramoutputStream *@throwsIOException */ publicstaticvoidzipFile(Listfiles,ZipOutputStreamoutputStream)throwsIOException,ServletException{ try{ intsize=files.size(); //压缩列表中的文件 for(inti=0;i0){ for(intj=0;j 以上基本满足文件上传下载所需。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。