SpringMVC+Ajax实现文件批量上传和下载功能实例代码

SpringMVC+Ajax实现文件批量上传和下载功能实例代码,第1张

概述今天做了文件的上传下载,小小总结一下,基本的web项目建立及SpringMVC框架搭建此处不详细写出来了。

今天做了文件的上传下载,小小总结一下,基本的web项目建立及SpringMVC框架搭建此处不详细写出来了。

上传form:

<form ID="uploadfiles" enctype="multipart/form-data">    <input type="file" multiple="multiple" ID="file_upload" name="file_upload" />     <input type="button" value="上传" onclick="upload()" /></form>

上传AJAX:

<script type="text/JavaScript">/* * 上传文件 */function upload(){  var formData = new FormData($( "#uploadfiles" )[0]);   $.AJAX({      type: "post",url: "./path/upload",dataType: "Json",data: formData,/**         *必须false才会自动加上正确的Content-Type         */       ContentType : false,/**         * 必须false才会避开jquery对 formdata 的默认处理         * XMLhttpRequest会对 formdata 进行正确的处理         */       processData : false,success: function(data){//从后端返回数据进行处理       if(data){         alert("上传成功!");       }else{         alert("上传失败!");       }      },error: function(err) {//提交出错        $("#msg").HTML(JsON.stringify(err));//打出响应信息        alert("服务器无响应");       }     });}</script>

spring.xml配置加上:

<!-- 配置文件上传 -->  <bean ID="multipartResolver"    >    <!-- 默认编码 -->    <property name="defaultEnCoding" value="utf-8" />    <!-- 文件大小最大值 -->    <property name="maxUploadSize" value="10485760000" />    <!-- 内存中的最大值 -->    <property name="maxInMemorySize" value="40960" />  </bean>controller:/*   * 上传多个文件   */  @RequestMapPing(value = "/upload",produces = "application/Json;charset=UTF-8")  public @ResponseBody  boolean uploadfiles(@RequestParam("file_upload") multipartfile [] files) {    boolean result = false;    String realPath;    for(int i=0;i<files.length;i++){      if (!files[i].isEmpty()) {           String uniquename=files[i].getoriginalfilename();//得到文件名          realPath="E:"+file.separator+uniquename;//文件上传的路径这里为E盘          files[i].transferTo(new file(realPath));  // 转存文件          result = true;              } catch (Exception e) {           e.printstacktrace();         }       }    }    return result;  }

下载的Jsp页面代码根据需求不同自己设计,这里给出controller代码:

/*   * 下载多个文件   */  @RequestMapPing(value = "/download")  public voID downloadfiles(httpServletResponse response) {    String str= request.getParameter("rows");//下载文件信息,包括文件名、存储路径等    JsONArray path=(JsONArray) JsONArray.parse(request.getParameter("rows"));    Path paths[]=new Path[path.size()];    paths = JsONArray.parseArray(str,Path.class).toArray(paths);    String uri = "d:"+ file.separator + "mldn.zip";//临时文件存储路径    file zipfile = new file(uri) ;  // 定义压缩文件名称     ZipOutputStream zipOut = null;// 声明压缩流对象     inputStream input = null;    //将要压缩的文件加入到压缩输出流中    try {      zipOut = new ZipOutputStream(new fileOutputStream(zipfile));    } catch (fileNotFoundException e) {      e.printstacktrace();    }    for(int i = 0;i<paths.length;i++){      file file = new file(paths[i].getUri()+file.separator+paths[i].getfilename());      try {        input = new fileinputStream(file) ;// 定义文件的输入流         zipOut.putNextEntry(new ZipEntry(file.getname())) ; // 设置ZipEntry对象       } catch (Exception e) {        e.printstacktrace();      }     }    //将文件写入到压缩文件中    int temp = 0 ;     try {      while((temp=input.read())!=-1){ // 读取内容         zipOut.write(temp) ;  // 写到压缩文件中       }    } catch (IOException e) {      e.printstacktrace();    }finally{       try {        input.close() ;        zipOut.close() ;       } catch (IOException e) {        e.printstacktrace();      }     }    try {      // 以流的形式下载文件。      BufferedinputStream fis = new BufferedinputStream(new fileinputStream(zipfile));      byte[] buffer = new byte[fis.available()];      fis.read(buffer);      fis.close();      // 清空response      response.reset();      OutputStream toClIEnt = new bufferedoutputstream(response.getoutputStream());      response.setContentType("application/x-msdownload;");       response.setheader("Content-disposition","attachment;filename=" + zipfile.getname());      toClIEnt.write(buffer);      toClIEnt.flush();      toClIEnt.close();      zipfile.delete();    //将生成的服务器端文件删除    }     catch (IOException ex) {      ex.printstacktrace();    }    }

将多个文件打成一个压缩包下载,然后将生成的临时压缩文件删除。

下载页面如果用AJAX提交请求的话要注意:AJAX函数的返回类型只有xml、text、Json、HTML等类型,没有“流”类型,所以我们要实现AJAX下载,不能够使用相应的AJAX函数进行文件下载。但可以用Js生成一个form,用这个form提交参数,并返回“流”类型的数据。

例子:

function download(){    var form=$("<form>");//定义一个form表单    form.attr("style","display:none");    form.attr("target","");    form.attr("method","post");    form.attr("action","./path/download");//请求url    var input1=$("<input>");    input1.attr("type","hIDden");    input1.attr("name","rows");//设置属性的名字    input1.attr("value",“test”);//设置属性的值    $("body").append(form);//将表单放置在web中    form.append(input1);    form.submit();//表单提交                     }

总结

以上所述是小编给大家介绍的SpringMVC+AJAX实现文件批量上传和下载功能实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

总结

以上是内存溢出为你收集整理的SpringMVC+Ajax实现文件批量上传和下载功能实例代码全部内容,希望文章能够帮你解决SpringMVC+Ajax实现文件批量上传和下载功能实例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1227646.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存