一篇文章讲明白dropzone上传文件

简介: 一篇文章讲明白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 "拖动文件上传\

23 (或者点击上传)

\

24 ",

25 dictResponseError:"文件上传失败!",

26 dictFileTooBig:"文件过大,上传失败!",

27 //change the previewTemplate to use Bootstrap progress bars

28 previewTemplate: "\n \n \n \n \n \n \n \n \n \n",

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);//代码效果参考:http://www.zidongmutanji.com/zsjx/553227.html

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 //代码效果参考:http://www.zidongmutanji.com/zsjx/535207.html

"redirect:/uploadController/dropzone.action";

66 }

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

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

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

相关文章
|
6月前
|
前端开发 Java Spring
教会你怎么使用SpringMVC 文件上传
教会你怎么使用SpringMVC 文件上传
75 0
使用PostMan上传文件,有图易懂
使用PostMan上传文件,有图易懂
6490 0
使用PostMan上传文件,有图易懂
视频文件上传接口上传不了,怎样解决??
视频文件上传接口上传不了,怎样解决??
|
前端开发
前端:下载文件(多种方法)
前端:下载文件(多种方法)
867 0
|
JSON 数据格式
你有在上传文件下载文件踩过坑吗?
你有在上传文件下载文件踩过坑吗?
82 0
|
前端开发
前端下载文件的几种方式
前端下载文件的几种方式
1180 0
|
API PHP
php函数API接口的一段代码,不为什么就是想放在这里
php函数API接口的一段代码,不为什么就是想放在这里
46 0
|
JavaScript
FormData可以做些什么事,除了文件上传当然还有文件分片上传呀
FormData 是一个用于表单数据的键值对,可以通过 FormData 对象来模拟表单提交,也可以通过 FormData 对象来实现文件上传。
363 0
|
前端开发 JavaScript
请问:怎么实现大文件快速上传?
请问:怎么实现大文件快速上传?
199 0
|
网络协议 分布式数据库 开发工具
面试必学:输入 URL到页面的全过程-----五步完成、简单明了
面试必学:输入 URL到页面的全过程-----五步完成、简单明了
167 0
面试必学:输入 URL到页面的全过程-----五步完成、简单明了