1. html文件

dropzone的原理是模拟表单来上传文件,html中的元素有多重形式。

  1. 可以建立一个form表单:

    1. <form id="dropz" action="/upload.php" enctype="multipart/form-data">
    2. <input type="file" name="file">
    3. </form>
  2. 也可以不用表单的形式,直接用一个div
    1. <div id="dropz"></div>

2.引入css文件

引入dropzone.min.css之后会有更漂亮的外观;

然后可以自己添加些外观样式覆盖它,如:

  1. <style>
  2. #filedropzone{
  3. width: 900px;
  4. height: 220px;
  5. margin-left: 200px;
  6. margin-top: 100px;
  7. border: 3px dashed green;
  8. border-radius: 2%;
  9. box-shadow: 3px 3px 5px #888888;
  10.  
  11. }
  12. </style>

  

3.js文件

必须配置js才能上传 
1.如果没有引入jquery:

  1. var myDropzone = new Dropzone("div#mydropzone", {url: "/upload"});

2.如果引入了jquery:

  1. $("#dropz").dropzone({url: "/upload"})
常用的配置项:
  • url : 必要参数,文件的上传地址;
  • maxFiles : 默认为null,可以指定为一个数值,限制最多文件数量。
  • maxFilesize : 限制文件的大小,单位是MB;
  • acceptedFiles : 允许上传的文件类型,文件扩展名以逗号隔开,格式见实例;
  • autoProcessQueue : 默认为true,即拖入文件立即自动上传;如果需要在上传之前有一些选择的操作,然后手动上传,可以把该属性设置为false,然后手动点击按钮上传;
  • paramName : 相当于<input>元素的name属性,默认为file。
提示文本:
  • dictDefaultMessage : 没有任何文件被添加时的提示文本;
  • dictFallbackMessage:Fallback 情况下的提示文本。
  • dictInvalidInputType:文件类型被拒绝时的提示文本。
  • dictFileTooBig:文件大小过大时的提示文本。
  • dictCancelUpload:取消上传链接的文本。
  • dictCancelUploadConfirmation:取消上传确认信息的文本。
  • dictRemoveFile:移除文件链接的文本。
  • dictMaxFilesExceeded:超过最大文件数量的提示文本。
添加监听事件:
  1. $("#dropz").dropzone({
  2. init: function() {
  3. this.on("addedfile", function(file) {
  4. // actions...
  5. });
  6. }
  7. });

  

没有添加jquery时:

  1. dropz.on("addedfile", function(file) {
  2. // actions...
  3. });
常用事件:
  • addedfile : 添加文件是发生
  • removefile : 手动从服务器删除文件时发生
  • success : 上传成功后发生
  • complete:当文件上传成功或失败之后发生。
  • canceled:当文件在上传时被取消的时候发生。
  • maxfilesreached:当文件数量达到最大时发生。
  • maxfilesexceeded:当文件数量超过限制时发生。
  • totaluploadprogress : 文件上传中的返回值,第一个参数为总上传进度(0到100),第二个为总字节数,第三个为总上传字节数,利用这几个参数,可计算出上传速度,和剩余上传时间;

html文件demo

  1. <link rel="stylesheet" href="/static/plugins/dropzone/dropzone.css">
  2.  
  3. <div id="upload_div">
  4.  
  5. <p>请上传您的代码(如包含文件夹需要打包后再上传)</p>
  6. <form id="filedropzone" method="post" action="/upload" class="dropzone dz-clickable" >
  7. <div class="dz-default dz-message">
  8. <div class="dz-icon icon-wrap icon-circle icon-wrap-md">
  9. <i class="fa fa-cloud-upload fa-3x"></i>
  10. </div>
  11. <div>
  12. <p class="dz-text">把打包后的代码拖放到这里</p>
  13. <p class="text-muted">最多可上传2张照片</p>
  14. </div>
  15. </div>
  16. </form>
  17.  
  18. </div>
  19.  
  20. <script src="/static/plugins/dropzone/dropzone.js"></script>
  21.  
  22. <script>
  23. $(document).ready(function () {
  24. Dropzone.options.filedropzone = {
  25. url:"{{ request.path }}",
  26. paramName: "file", // The name that will be used to transfer the file
  27. maxFilesize: 1, // MB,
  28. addRemoveLinks:true,
  29. maxFiles:5,
  30. uploadMultiple:true,
  31. accept: function(file, done) {
  32. if (! file.name.endsWith(".zip") ) {
  33. alert("只能上传.zip格式的压缩包")
  34. done("文件为上传")
  35. myDropzone.removeFile(file);
  36. }
  37. else { done(); }
  38. }
  39. };
  40.  
  41. Dropzone.autoDiscover = false;
  42. myDropzone = new Dropzone("#filedropzone");
  43. myDropzone.on("addedfile", function(file) {
  44. /* Maybe display some more file information on your page */
  45. });
  46.  
  47. myDropzone.on("success", function(file,response) {
  48. /* Maybe display some more file information on your page */
  49. console.log('filex upload done...', response);
  50. } )
  51.  
  52. })
  53.  
  54. </script>

  

完整示例:
  1. $("#dropz").dropzone({
  2. url: "/files/uploading",
  3. maxFiles: 1,
  4. maxFilesize: 1024,
  5. acceptedFiles: ".jpg,.jpeg,.doc,.docx,.ppt,.pptx,.txt,.avi,.pdf,.mp3,.zip",
  6. autoProcessQueue: false,
  7. paramName: "file",
  8. dictDefaultMessage: "拖入需要上传的文件",
  9. init: function () {
  10. var myDropzone = this, submitButton = document.querySelector("#qr"),
  11. cancelButton = document.querySelector("#cancel");
  12. myDropzone.on('addedfile', function (file) {
  13. //添加上传文件的过程,可再次弹出弹框,添加上传文件的信息
  14. });
  15. myDropzone.on('sending', function (data, xhr, formData) {
  16. //向后台发送该文件的参数
  17. formData.append('watermark', jQuery('#info').val());
  18. });
  19. myDropzone.on('success', function (files, response) {
  20. //文件上传成功之后的操作
  21. });
  22. myDropzone.on('error', function (files, response) {
  23. //文件上传失败后的操作
  24. });
  25. myDropzone.on('totaluploadprogress', function (progress, byte, bytes) {
  26. //progress为进度百分比
  27. $("#pro").text("上传进度:" + parseInt(progress) + "%");
  28. //计算上传速度和剩余时间
  29. var mm = 0;
  30. var byte = 0;
  31. var tt = setInterval(function () {
  32. mm++;
  33. var byte2 = bytes;
  34. var remain;
  35. var speed;
  36. var byteKb = byte/1024;
  37. var bytesKb = bytes/1024;
  38. var byteMb = byte/1024/1024;
  39. var bytesMb = bytes/1024/1024;
  40. if(byteKb <= 1024){
  41. speed = (parseFloat(byte2 - byte)/(1024)/mm).toFixed(2) + " KB/s";
  42. remain = (byteKb - bytesKb)/parseFloat(speed);
  43. }else{
  44. speed = (parseFloat(byte2 - byte)/(1024*1024)/mm).toFixed(2) + " MB/s";
  45. remain = (byteMb - bytesMb)/parseFloat(speed);
  46. }
  47. $("#dropz #speed").text("上传速率:" + speed);
  48. $("#dropz #time").text("剩余时间"+arrive_timer_format(parseInt(remain)));
  49. if(bytes >= byte){
  50. clearInterval(tt);
  51. if(byteKb <= 1024){
  52. $("#dropz #speed").text("上传速率:0 KB/s");
  53. }else{
  54. $("#dropz #speed").text("上传速率:0 MB/s");
  55. }
  56. $("#dropz #time").text("剩余时间:0:00:00");
  57. }
  58. },1000);
  59. });
  60. submitButton.addEventListener('click', function () {
  61. //点击上传文件
  62. myDropzone.processQueue();
  63. });
  64. cancelButton.addEventListener('click', function () {
  65. //取消上传
  66. myDropzone.removeAllFiles();
  67. });
  68. }
  69. });
  70. //剩余时间格式转换:
  71. function arrive_timer_format(s) {
  72. var t;
  73. if(s > -1){
  74. var hour = Math.floor(s/3600);
  75. var min = Math.floor(s/60) % 60;
  76. var sec = s % 60;
  77. var day = parseInt(hour / 24);
  78. if (day > 0) {
  79. hour = hour - 24 * day;
  80. t = day + "day " + hour + ":";
  81. }
  82. else t = hour + ":";
  83. if(min < 10){t += "0";}
  84. t += min + ":";
  85. if(sec < 10){t += "0";}
  86. t += sec;
  87. }
  88. return t;
  89. }

 

  1. #urls.py
  2.  
  3. from app01 import views
  4.  
  5. urlpatterns = [
  6. url(r'^admin/', admin.site.urls),
  7. url(r'^test/', views.dropzoneTest),
  8. ]
  9.  
  10. #views.py
  11.  
  12. from django.shortcuts import render
  13.  
  14. def dropzoneTest(request):
  15. if request.is_ajax():
  16. file = request.FILES.get('file')
  17. with open('file.jpg','wb') as f:
  18. for line in file:
  19. f.write(line)
  20. return render(request,'dropzoneTest.html')
  21.  
  22. #dropzoneDemo.html
  23.  
  24. <!DOCTYPE html>
  25. <html lang="en">
  26. <head>
  27. <meta charset="UTF-8">
  28. <title>Title</title>
  29. {% load static %}
  30. <link rel="stylesheet" href="{% static 'dropzone.css' %}">
  31. <script src="{% static 'jquery-3.2.1.min.js' %}"></script>
  32. <script src="{% static 'dropzone.js' %}"></script>
  33. </head>
  34. <body>
  35. <p>请上传身份照正反面照片</p>
  36. <form id="filedropzone" method="post" action="{{ request.path }}" class="dropzone dz-clickable" >{% csrf_token %}
  37. <div class="dz-default dz-message">
  38. <div class="dz-icon icon-wrap icon-circle icon-wrap-md">
  39. <i class="fa fa-cloud-upload fa-3x"></i>
  40. </div>
  41. <div>
  42. <p class="dz-text">把证件信息拖放到这里</p>
  43. <p class="text-muted">最多可上传2张照片</p>
  44. </div>
  45. </div>
  46. </form>
  47.  
  48. <!--------------------------------------------------------------->
  49. <script>
  50. $(document).ready(function () {
  51. $("#filedropzone").dropzone({
  52. url: "{{ request.path }}",
  53. maxFiles: 5,
  54. maxFilesize: 1024,
  55. acceptedFiles: ".jpg,.jpeg,.doc,.docx,.ppt,.pptx,.txt,.avi,.pdf,.mp3,.zip",
  56. autoProcessQueue: false,
  57. paramName: "file",
  58. dictDefaultMessage: "拖入需要上传的文件",
  59. init: function () {
  60. var myDropzone = this, submitButton = document.querySelector("#qr"),
  61. cancelButton = document.querySelector("#cancel");
  62. myDropzone.on('addedfile', function (file) {
  63. //添加上传文件的过程,可再次弹出弹框,添加上传文件的信息
  64. });
  65. myDropzone.on('sending', function (data, xhr, formData) {
  66. //向后台发送该文件的参数
  67. formData.append('watermark', jQuery('#info').val());
  68. });
  69. myDropzone.on('success', function (files, response) {
  70. //文件上传成功之后的操作
  71. });
  72. myDropzone.on('error', function (files, response) {
  73. //文件上传失败后的操作
  74. });
  75. myDropzone.on('totaluploadprogress', function (progress, byte, bytes) {
  76. //progress为进度百分比
  77. $("#pro").text("上传进度:" + parseInt(progress) + "%");
  78. //计算上传速度和剩余时间
  79. var mm = 0;
  80. var byte = 0;
  81. var tt = setInterval(function () {
  82. mm++;
  83. var byte2 = bytes;
  84. var remain;
  85. var speed;
  86. var byteKb = byte / 1024;
  87. var bytesKb = bytes / 1024;
  88. var byteMb = byte / 1024 / 1024;
  89. var bytesMb = bytes / 1024 / 1024;
  90. if (byteKb <= 1024) {
  91. speed = (parseFloat(byte2 - byte) / (1024) / mm).toFixed(2) + " KB/s";
  92. remain = (byteKb - bytesKb) / parseFloat(speed);
  93. } else {
  94. speed = (parseFloat(byte2 - byte) / (1024 * 1024) / mm).toFixed(2) + " MB/s";
  95. remain = (byteMb - bytesMb) / parseFloat(speed);
  96. }
  97. $("#dropz #speed").text("上传速率:" + speed);
  98. $("#dropz #time").text("剩余时间" + arrive_timer_format(parseInt(remain)));
  99. if (bytes >= byte) {
  100. clearInterval(tt);
  101. if (byteKb <= 1024) {
  102. $("#dropz #speed").text("上传速率:0 KB/s");
  103. } else {
  104. $("#dropz #speed").text("上传速率:0 MB/s");
  105. }
  106. $("#dropz #time").text("剩余时间:0:00:00");
  107. }
  108. }, 1000);
  109. });
  110. submitButton.addEventListener('click', function () {
  111. //点击上传文件
  112. myDropzone.processQueue();
  113. });
  114. cancelButton.addEventListener('click', function () {
  115. //取消上传
  116. myDropzone.removeAllFiles();
  117. });
  118. }
  119. });
  120. //剩余时间格式转换:
  121. function arrive_timer_format(s) {
  122. var t;
  123. if (s > -1) {
  124. var hour = Math.floor(s / 3600);
  125. var min = Math.floor(s / 60) % 60;
  126. var sec = s % 60;
  127. var day = parseInt(hour / 24);
  128. if (day > 0) {
  129. hour = hour - 24 * day;
  130. t = day + "day " + hour + ":";
  131. }
  132. else t = hour + ":";
  133. if (min < 10) {
  134. t += "0";
  135. }
  136. t += min + ":";
  137. if (sec < 10) {
  138. t += "0";
  139. }
  140. t += sec;
  141. }
  142. return t;
  143. }
  144. })
  145. </script>
  146. </body>
  147. </html>

  

  

 

DropZone(文件上传插件)的更多相关文章

  1. 【精心推荐】几款极好的 JavaScript 文件上传插件

    文件上传功能作为网页重要的组成部分,几乎无处不在,从简单的单个文件上传到复杂的批量上传.拖放上传,需要开发者花费大量的时间和精力去处理,以期实现好用的上传功能.这篇文章向大家推荐几款很棒的 JavaS ...

  2. 20款最好的jQuery文件上传插件

    当它是关于开发网络应用程序和网页的时候,文件上传功能的重要性是不容忽视的.一个文件上传功能可以让你上传所有类型的文件在网站上,包括视频,图像,文件和更多.创建一个文件上传功能,对你的网站是不是很难,有 ...

  3. 强大的支持多文件上传的jQuery文件上传插件Uploadify

    支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持Fla ...

  4. jQuery文件上传插件Uploadify(转)

    一款基于flash的文件上传,有进度条和支持大文件上传,且可以多文件上传队列. 这款在flash的基础上增加了html5的支持,所以在移动端也可以使用. 由于官方提供的版本是flash免费,html5 ...

  5. 基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用

    Bootstrap文件上传插件File Input是一个不错的文件上传控件,但是搜索使用到的案例不多,使用的时候,也是一步一个脚印一样摸着石头过河,这个控件在界面呈现上,叫我之前使用过的Uploadi ...

  6. jQuery文件上传插件jQuery Upload File 有上传进度条

    jQuery文件上传插件jQuery Upload File 有上传进度条 jQuery文件上传插件jQuery Upload File,插件使用简单,支持单文件和多文件上传,支持文件拖拽上传,有进度 ...

  7. 可拖拽和带预览图的jQuery文件上传插件ssi-uploader

    插件描述:ssi-uploader是一款带预览图并且可以拖拽文件的jQuery ajax文件上传插件.该文件上传插件支持AJAX,支持多文件上传,可控制上的文件格式和文件大小,提供各种回调函数,使用非 ...

  8. Bootstrap文件上传插件File Input的使用

    基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用 Bootstrap文件上传插件File Input是一个不错的文件上传控件, ...

  9. 支持断点续传的文件上传插件——Huploadify-V2.0来了

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  10. Jquery-uploadify多文件上传插件使用介绍

    Jquery-uploadify多文件上传插件使用起来非常的给力,在此记录一下使用方法. query-uploadify插件的属性设置 <script src="JS/jquery.m ...

随机推荐

  1. OC中的枚举类型

    背景 一直对OC中的位移操作枚举不太理解,查找到两篇介绍OC中枚举的文章,觉得很不错. 什么是位移操作枚举呢? typedef NS_OPTIONS(NSUInteger, UIViewAutores ...

  2. C语言设计模式-封装-继承-多态

    快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...

  3. 【cocos 2d-x】VS2013+cocos2d-x3.3Final+Adriod交叉编译环境配置(超详细版)

    本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder  微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.com ...

  4. IP的种类与获取方式

    IP 的种类与取得方式 接下来要跟大家谈一谈也是很容易造成大家困扰的一个部分,那就是 IP 的种类!很多朋友常常听到什么『真实IP, 实体 IP, 虚拟 IP, 假的 IP....』烦都烦死了-其实不 ...

  5. how tomcat works 总结 二

    第五章 servlet容器 第 5 章讨论 container 模块.container 指的是 org.apache.catalina.Container 接口,有4 种类型的 container: ...

  6. MongoDB之Java测试代码(DAO层)

    MongoInit.java是数据库初始化及连接类 MongoUtils.java是对mongodb的各种操作方法 MongoInit.java package com.wlwcloud.datate ...

  7. ruby通过telnet读取互联网时间

    在前面的博文ntp服务器也谈逆向工程中,本猫曾经武断的认为telnet是无法连接到ntp服务器的.因为当时是这样连接的: telnet time.nist.gov 123,端口号123是在/etc/s ...

  8. WebDriver元素等待机制

    能否构建健壮和可靠的测试是UI自动化测试能否成功的关键因素之一.但实际情况是当一个测试接着一个测试执行的时候,常会遇到各种不同的状况.比如脚本去定位元素或去验证程序的运行状态时,有时会发现找不到元素, ...

  9. PM2 Quick Start

    PM2教程 @(Node)[负载均衡|进程管理器] [TOC] PM2简介 PM2 是一个带有负载均衡功能的Node应用的进程管理器. 当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永 ...

  10. 使用 focus() 和 blur()

    <html> <head> <style type="text/css"> a:active {color:green} </style& ...