模板下载

来源:互联网 发布:淘宝货源公司 编辑:程序博客网 时间:2024/04/24 04:27

需求:模板上传及下载

模板下载jsp代码如下:

<div id="select_condition"><div class="select_condition_row" name="form1" >  数据类型:<select style="width:110px;" id="select_con"><option value="1000" onclick="selectBusinessHall()" >营业厅</option><option value="1002" onclick="selectVillageMessage()">4G参数</option><option value="1003" onclick="selectBasestationInforplan()">基站信息规划</option><option value="1001" onclick="showMr()">MR数据配置</option></select><span id="datePage" style="right:10px;position:absolute;"></span></div><div class="select_condition_row select_button" id="exim"><span><a onclick="improtExample()">模板上传</a></span><span><a onclick="DownloadExample()">模板下载</a></span><span><a onclick="imports()">导入</a></span></div><input type="file" id="file" name=""   onchange="fileChange(this)" style="FILTER: alpha(opacity=0); moz-opacity: 0; opacity: 0;" /><input type="file" id="uploadifys" name="myfiles"  multiple="multiple" onchange="fileChanges(this)" style="FILTER: alpha(opacity=0); moz-opacity: 0; opacity: 0;" /></div><!-- 显示下载页面--》<div id="showDiv" style='opacity:0.5; z-index: 100; position: fixed;width: 100%;height: 100%;background-color:#bebaba; display:none;'></div>        <div id="checkDiv" style='z-index: 100; position: fixed; position: absolute;left: 32%;top: 10%;'>            <div id="p" class="easyui-panel"                style="width:525px; height: 452px; background: #fafafa;"                title="模板下载" closable="true">                <div class="select_condition_row1 select_button2">                    <span ><a onclick="downMessage()">模板下载</a></span>                </div>                <div class="checkContent">                </div>            </div>        </div>

js代码如下:

/** * 模板上传,及下载 */function improtExample(){var ie = !-[1,];   if(ie){  $("#uploadifys").trigger('click').trigger('change');  }else{  $("#uploadifys").trigger('click');  }  }/** * 模板下载 */function DownloadExample(){$("#showDiv").show(); $("#checkDiv >.panel").show();$.ajax({        type:'post',        url:path+'/SystemSiteController/listFile.do',    dataType:'json',  async: true,success:function(result){var jso = result.fileNameMapvar htmls = "<table class='reason' style='width: 100%;'>";$.each(jso, function(i,val){htmls = htmls + "<tr><td ><label style='padding-left: 9px;'><input name='Fruit' type='checkbox' value='"+val+"' />"+val+" </label</td></tr>"});htmls = htmls + "</table>"$(".checkContent").html(htmls);}});}/** *  模板下载上传下载目录 */function downMessage(){text = $("input:checkbox[name='Fruit']:checked").map(function(index,elem) {return $(elem).val();}).get().join(',');window.location.href = path+'/SystemSiteController/downListFile.do?fileName='+text;}/** * 模板下载显示下载目录 * @param cellName */function checkOrder(objectid, cellName){$.ajax({        type:'post',        url:path+'/SystemSetting/listFile.do',    dataType:'json',  async: true,success:function(result){}});}

controller的代码如下:

/** * 列出模板下载需要下载的文件 * @param request * @param response * @return */@RequestMapping("listFile")public ModelAndView listFile(HttpServletRequest request,HttpServletResponse response){//获取上传文件的目录//String uploadFilePath = (request.getSession().getServletContext().getRealPath("")).replace("\\", "/") +"systemPage";String uploadFilePath = request.getSession().getServletContext().getRealPath("/systemPage");//存储要下载的文件名Map<String,String> fileNameMap = new HashMap<String,String>();//递归遍历filepath目录下的所有文件和目录,将文件的文件名存储到map集合中(new DownLoadFile()).listfile(new File(uploadFilePath),fileNameMap);//File既可以代表一个文件也可以代表一个目录Map<String,Object> attributes = new HashMap<String,Object>();attributes.put("fileNameMap", fileNameMap);MappingJackson2JsonView view = new MappingJackson2JsonView();view.setAttributesMap(attributes);ModelAndView model = new ModelAndView();model.setView(view);return model;}/** * 模板下载 * @param request * @param response * @throws UnsupportedEncodingException  */@RequestMapping("downListFile")public static void downListFile(HttpServletRequest request, HttpServletResponse response)throws Exception {String fileName  = request.getParameter("fileName");String[] fileNames = fileName.split(",");//文件的目录String uploadFilePath = request.getSession().getServletContext().getRealPath("/systemPage");//这个集合就是你想要打包的所有文件List<File> files = new ArrayList<File>();for (int i = 0; i < fileNames.length; i++) {String path = uploadFilePath +"/"+fileNames[i];File ff = new File(path);files.add(ff);}try {//创建一个临时压缩文件, 我们会把文件流全部注入到这个文件中 ,这里的文件你可以自定义是.rar还是.zipFile file = new File("c:/DataTemplate.rar");if (!file.exists()){       file.createNewFile();   }response.reset();//response.getWriter()//创建文件输出流FileOutputStream fous = new FileOutputStream(file); //打包的方法我们会用到ZipOutputStream这样一个输出流,所以这里我们把输出流转换一下ZipOutputStream zipOut = new ZipOutputStream(fous,StandardCharsets.UTF_8);//这个方法接受的就是一个所要打包文件的集合,还有一个ZipOutputStream(new DownLoadFile()).zipFile(files, zipOut);zipOut.close();fous.close();(new DownLoadFile()).downloadZip(file,response);}catch (Exception e) {    e.printStackTrace();}}

package com.sls.framework.util;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URLEncoder;import java.util.List;import java.util.Map;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;import javax.servlet.http.HttpServletResponse;/** * @version 创建时间:2016年4月27日 下午4:45:23 *  文件下载帮助类*/public class DownLoadFile {/** * 遍历文件夹里的所有文件夹名 * @param file * @param map */public void listfile(File file,Map<String,String> map){//如果file代表的不是一个文件,而是一个目录if(!file.isFile()){//列出该目录下的所有文件和目录File files[] = file.listFiles();//遍历files[]数组for(File f : files){//递归listfile(f,map);}}else{/*** 处理文件名,上传后的文件是以uuid_文件名的形式去重新命名的,去除文件名的uuid_部分file.getName().indexOf("_")检索字符串中第一次出现"_"字符的位置,如果文件名类似于:9349249849-88343-8344_阿_凡_达.avi那么file.getName().substring(file.getName().indexOf("_")+1)处理之后就可以得到阿_凡_达.avi部分*/String realName = file.getName().substring(file.getName().indexOf("_")+1);//file.getName()得到的是文件的原始名称,这个名称是唯一的,因此可以作为key,realName是处理过后的名称,有可能会重复map.put(file.getName(), realName); }}/** * 把接受的全部文件打成压缩包  * @param List<File>;   * @param org.apache.tools.zip.ZipOutputStream   */public static void zipFile(List files,ZipOutputStream outputStream) {    int size = files.size();    for(int i = 0; i < size; i++) {        File file = (File) files.get(i);        zipFile(file, outputStream);    }}/**   * 根据输入的文件与输出流对文件进行打包 * @param File * @param org.apache.tools.zip.ZipOutputStream */public static void zipFile(File inputFile,ZipOutputStream ouputStream) {    try {        if(inputFile.exists()) {        //如果是目录的话这里是不采取操作的,至于目录的打包正在研究中        if (inputFile.isFile()) {            FileInputStream IN = new FileInputStream(inputFile);            BufferedInputStream bins = new BufferedInputStream(IN, 512);            //org.apache.tools.zip.ZipEntry            ZipEntry entry = new ZipEntry(inputFile.getName());            ouputStream.putNextEntry(entry);            // 向压缩文件中输出数据               int nNumber;                        byte[] buffer = new byte[512];            while ((nNumber = bins.read(buffer)) != -1) {                ouputStream.write(buffer, 0, nNumber);            }            // 关闭创建的流对象                   bins.close();                IN.close();            } else {                try {                    File[] files = inputFile.listFiles();                    for (int i = 0; i < files.length; i++) {                        zipFile(files[i], ouputStream);                    }                } catch (Exception e) {                    e.printStackTrace();                }            }        }    } catch (Exception e) {        e.printStackTrace();    }}/** * 已流的=下载 * @param file * @param response */    public static void downloadZip(File file,HttpServletResponse response) {        try {        // 以流的形式下载文件。        InputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));        byte[] buffer = new byte[fis.available()];        fis.read(buffer);        fis.close();        // 清空response        response.reset();        OutputStream toClient = new BufferedOutputStream(response.getOutputStream());        response.setContentType("application/octet-stream");        //如果输出的是中文名的文件,在此处就要用URLEncoder.encode方法进行处理        response.setHeader("Content-Disposition", "attachment;filename=" +URLEncoder.encode(file.getName(), "UTF-8"));        toClient.write(buffer);        toClient.flush();        toClient.close();        } catch (IOException ex) {        ex.printStackTrace();        }finally{try {//       File f = new File(file.getPath());//       f.delete();   } catch (Exception e) {        e.printStackTrace();   }        }    }}



2 0
原创粉丝点击