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月初的时候用的插件,至今过了一个月了才抽出时间写写总结,在此记录下来给自己一个参考

猜你喜欢

转载自www.cnblogs.com/tele-share/p/8983180.html
今日推荐