dropzone上传文件


先上张效果图吧

 

1.引入dropzone的js和css文件

2.html这里我用了一个form,当然你也可以直接用一个div,无论你用什么都要加上class="dropzone"

3.js

 1             var fileArr = new Array();  2             jQuery(function($){  3                 Dropzone.autoDiscover = false;  4                 Dropzone.options.myAwesomeDropzone = false;  5             try {  6               $(".dropzone").dropzone({  7                 url:"${pageContext.request.contextPath}/uploadController/upload.action",  8                 method:"post",  9                 paramName:"file",  10                 autoProcessQueue:true,//自动上传  11                 maxFilesize:1024, // MB
 12                 uploadMultiple:false,  13                 parallelUploads:10,  14                 acceptedFiles:".rar,.zip,.7z",  15                 dictInvalidFileType:"支持的文件类型是.rar,.zip,.7z",  16                 addRemoveLinks:true,  17             // maxFiles: //指的是上传目录下的最大文件数
 18                 dictRemoveFile:"移除文件",  19                 dictUploadCanceled:"取消",  20                 dictCancelUploadConfirmation:"取消上传该文件?",  21  dictDefaultMessage:  22                 "<span class='bigger-150 bolder'><i class='icon-caret-right red'></i>拖动文件</span>上传\  23  <span class='smaller-80 gre'>(或者点击上传)</span> <br /> \  24                 <i class='upload-icon icon-cloud-upload blue icon-3x'></i>",  25                 dictResponseError:"文件上传失败!",  26                 dictFileTooBig:"文件过大,上传失败!",  27                 //change the previewTemplate to use Bootstrap progress bars
 28                 previewTemplate: "<div class=\"dz-preview dz-file-preview\">\n  <div class=\"dz-details\">\n    <div class=\"dz-filename\"><span data-dz-name></span></div>\n    <div class=\"dz-size\" data-dz-size></div>\n    <img data-dz-thumbnail />\n  </div>\n  <div class=\"progress progress-small progress-striped active\"><div class=\"progress-bar progress-bar-success\" data-dz-uploadprogress></div></div>\n  <div class=\"dz-success-mark\"><span></span></div>\n  <div class=\"dz-error-mark\"><span></span></div>\n  <div class=\"dz-error-message\"><span data-dz-errormessage></span></div>\n</div>",  29                 init:function(){  30                     this.on("addedfile",function(file,data) {  31  fileArr.push(file.upload.uuid);  32                         //解决点击时重复发送请求
 33                         $(".dz-remove").each(function(index) {  34                               if(!$(".dz-remove:eq(" + index + ")").attr("id")) {  35                                   $(".dz-remove:eq(" + index + ")").attr("id",fileArr[index]);  36  }  37  })  38                          
 39  })  40                     this.on("success",function(file,data){  41                         //var myDropzone = this;
 42                          $("#" + file.upload.uuid).click(function() {  43                                 var fileName = $(this).parent().find(".dz-filename").text();  44                                     if(window.confirm("确定要删除吗?")) {  45  $.ajax({  46                                              type:"POST",  47                                              url:"${pageContext.request.contextPath}/uploadController/delete.action",  48                                              data:{"fileName":fileName},  49                                              dataType:"json",  50                                              success:function(data){  51                                                     // this.removeFile(file);
 52  }  53  })  54  }  55                                 
 56  })  57                         
 58  });  59                     this.on("sending",function(file,data){  60                         
 61  })  62                     this.on("removedfile",function(file,data){  63                         
 64  })  65                     
 66                       this.on("canceled",function(file,data) {  67                          // alert("canceled");
 68                          this.removeFile(file);  69  });  70                     
 71                     this.on("error",function(file,data){  72                         
 73  });  74                     this.on("complete",function(file) {  75                             if(file.status == "canceled" || file.status == "error") {  76                                 var fileName = $("#" + file.upload.uuid).parent().find(".dz-filename").text();  77                                 setTimeout(function() {  78  $.ajax({  79                                          type:"POST",  80                                          url:"${pageContext.request.contextPath}/uploadController/delete.action",  81                                          data:{"fileName":fileName},  82                                          dataType:"json",  83                                          success:function(data){  84                                              if(data == "success") {  85                                                 // alert("删除成功");
 86  }  87  },  88                                          error:function(ajax) {  89  alert(ajax.status);  90  }  91  })  92                                 },2000);  93  }  94  })  95                     
 96  }  97  });  98             } catch(e) {  99               alert('Dropzone.js does not support older browsers!'); 100  } 101             
102         });

注意事项:

1.关于parallelUploads,这个参数我看了很多博客,都没有介绍,于是我去官网查了下,发现这个参数是文件上传队列数量的意思,

什么意思呢?如果你设置为1,但你上传的时候选择了多个文件,那么这些文件只会1个1个的上传而不是多个同时上传

 

3.后台

如果你做的时候后台报了异常org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.web.multipart.MultipartFile]: Specified class is an interface,

请在MultipartFile参数前加上@RequestParam,关于这个注解是起什么作用,自行百度

接收文件

 1 @RequestMapping("/upload")  2     public String upload(@RequestParam MultipartFile file,HttpSession session){  3         if(file == null) {  4             return "";  5  }  6         File newFile = null;  7         InputStream is = null;  8         BufferedOutputStream bos = null;  9         BufferedInputStream  bis = null; 10         try { 11             String originalFilename = file.getOriginalFilename(); 12             byte[] buffer = new byte[1024]; 13             String dirPath = session.getServletContext().getRealPath("/") + "upload"; 14             File dir  = new File(dirPath); 15             if(!dir.exists()) { 16  dir.getParentFile().mkdirs(); 17  } 18             if(originalFilename != null && originalFilename.trim().length() > 0) { 19                 newFile = new File(dirPath + "/" + originalFilename); 20  } 21             bos = new BufferedOutputStream(new FileOutputStream(newFile)); 22             is  = file.getInputStream(); 23           
24             bis = new BufferedInputStream(is); 25             int count = 0; 26             while((count = bis.read(buffer)) != -1){ 27                 
28                 bos.write(buffer, 0,count); 29  } 30  bos.flush(); 31             
32             String createTime = df.format(System.currentTimeMillis()); 33             FileBean fileBean = fileBeanService.findByName(originalFilename); 34             if(fileBean == null) { 35                 fileBean = new FileBean(); 36  fileBean.setName(originalFilename); 37  } 38  fileBean.setCreateTime(df.parse(createTime)); 39  fileBeanService.add(fileBean); 40             
41         } catch (FileNotFoundException e1) { 42  e1.printStackTrace(); 43         } catch (IOException e) { 44  e.printStackTrace(); 45         } catch (ParseException e) { 46             // TODO Auto-generated catch block
47  e.printStackTrace(); 48         }finally{ 49             if(bis != null){ 50                 try { 51  bis.close(); 52                 } catch (IOException e) { 53  e.printStackTrace(); 54  } 55  } 56             if(bos != null) { 57                 try { 58  bos.close(); 59                 } catch (IOException e) { 60  e.printStackTrace(); 61  } 62  } 63             
64  } 65         return "redirect:/uploadController/dropzone.action"; 66     }

 2.关于移除和取消上传文件

如果你用了数据库,直接把对应的字段改成0就表示此文件不存在,可以不删除如果你打算真的删除时,执行delete方法前后尽量先让线程睡眠一段时间,否则容易引起IOException,事实上文件上传过程中点击取消,实现的思路是先把文件上传上来,然后再删除,直接执行删除也有可能引起IOException

ps:这也是3月初的时候用的插件,至今过了一个月了才抽出时间写写总结,在此记录下来给自己一个参考


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM