使用Dropzone.js上传的示例代码


Posted in Javascript onOctober 10, 2017

本文介绍了使用Dropzone.js上传的示例代码,分享给大家,具体如下:

说明:后台用的python的flask框架,后台对你理解这篇文章没什么影响,你可以使用php

form作为上传区

引入Dropzone.js和dropzone.css然后使用表单form定义一个class=”dropzone”即可完成

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Flask upload with Dropzone example</title>
  <link rel="stylesheet" href="{{ url_for('static', filename='dropzone.css') }}" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" type="text/css" />
  <script src="{{ url_for('static', filename='jquery.js') }}"></script>
  <script src="{{ url_for('static', filename='dropzone.js') }}"></script>
</head>
<body>
<!-- 第一种上传 -->    
  <form id ="myAwesomeDropzone" action="{{ url_for('upload_file') }}" class="dropzone" method="POST" enctype="multipart/form-data"></form>
<!-- 第一种上传 --> 
</body>
</html>

效果

使用Dropzone.js上传的示例代码 

div作为上传区

div作为上传区也很简单

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Flask upload with Dropzone example</title>
  <link rel="stylesheet" href="{{ url_for('static', filename='dropzone.css') }}" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" type="text/css" />
  <script src="{{ url_for('static', filename='jquery.js') }}"></script>
  <script src="{{ url_for('static', filename='dropzone.js') }}"></script>
</head>
<body>
<div id="myId" class="dropzone" style="width: 800px; height: 300px;">点我上传</div>
<script type="text/javascript">
    //下面两行是js和jquery的方式实现绑定div的例子,你选择一种即可
    //var myDropzone = new Dropzone("#myId", { url: "{{ url_for('upload_file') }}" });
    $("#myId").dropzone({ url: "{{ url_for('upload_file') }}" });
   </script>
   
</body>
</html>

效果

使用Dropzone.js上传的示例代码 

form作为上传区配置

配置也分为两种,如果使用的form表单上传的就用如下方式配置

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Flask upload with Dropzone example</title>
  <link rel="stylesheet" href="{{ url_for('static', filename='dropzone.css') }}" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" type="text/css" />
  <script src="{{ url_for('static', filename='jquery.js') }}"></script>
  <script src="{{ url_for('static', filename='dropzone.js') }}"></script>
</head>
<body>
  <form id ="myAwesomeDropzone" action="{{ url_for('upload_file') }}" class="dropzone" method="POST" enctype="multipart/form-data">    
    <div class="fallback">
      <input name="file" type="file" multiple />
    </div> 
  </form>
<script type="text/javascript">
//两种配置方式,第一种,表单上传时的配置方式,可以打开form表单的注释,myAwesomeDropzone是表单的id
  Dropzone.options.myAwesomeDropzone = {
     paramName: "file", // The name that will be used to transfer the file
     maxFilesize: 2, // MB
     accept: function(file, done) {
      if (file.name != "justinbieber.jpg") {
         done("Naha, you don't.");
      }else { 
        done();
      }
    }
   };
</script>
   
</body>
</html>

效果

使用Dropzone.js上传的示例代码 

div作为上传区配置

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Flask upload with Dropzone example</title>
  <link rel="stylesheet" href="{{ url_for('static', filename='dropzone.css') }}" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" type="text/css" />
  <script src="{{ url_for('static', filename='jquery.js') }}"></script>
  <script src="{{ url_for('static', filename='dropzone.js') }}"></script>
</head>
<body>
 <div id="myId" class="dropzone" style="width: 800px; height: 300px;">点我上传</div>
<script type="text/javascript">
    //第二种配置,这种使用的是div做上传区域时使用的配置
    Dropzone.autoDiscover = false;//不知道该行有什么用,欢迎高手下方评论解答
    $("#myId").dropzone({ 
    url: "{{ url_for('upload_file') }}",
    addRemoveLinks: true,    
    method: 'post',
    filesizeBase: 1024    
    });
</script>
   
</body>
</html>

说明:关于其他的配置请看最后的链接

主题

第一种

<!DOCTYPE html>
<html>
<head>
 <meta charset=="utf-8">
 <!-- Latest compiled and minified CSS -->
 <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="external nofollow" >
 <!-- Optional theme -->
 <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css" rel="external nofollow" >
 <script src="{{ url_for('static', filename='jquery.js') }}"></script>
 <script src="{{ url_for('static', filename='dropzone.js') }}"></script>
 <script>
  Dropzone.autoDiscover = false;
 </script>
 <style>
  html, body {
   height: 100%;
  }
  #actions {
   margin: 2em 0;
  }
  /* Mimic table appearance */
  div.table {
   display: table;
  }
  div.table .file-row {
   display: table-row;
  }
  div.table .file-row > div {
   display: table-cell;
   vertical-align: top;
   border-top: 1px solid #ddd;
   padding: 8px;
  }
  div.table .file-row:nth-child(odd) {
   background: #f9f9f9;
  }
  /* The total progress gets shown by event listeners */
  #total-progress {
   opacity: 0;
   transition: opacity 0.3s linear;
  }
  /* Hide the progress bar when finished */
  #previews .file-row.dz-success .progress {
   opacity: 0;
   transition: opacity 0.3s linear;
  }
  /* Hide the delete button initially */
  #previews .file-row .delete {
   display: none;
  }
  /* Hide the start and cancel buttons and show the delete button */
  #previews .file-row.dz-success .start,
  #previews .file-row.dz-success .cancel {
   display: none;
  }
  #previews .file-row.dz-success .delete {
   display: block;
  }
 </style>
</head>
<body>
 
 <div class="container" id="container">
  <h2 class="lead">Configuration Demo</h2>
  <div id="actions" class="row">
   <div class="col-lg-7">
    <!-- 控制总体的三个按钮 -->
    <span class="btn btn-success fileinput-button">
      <i class="glyphicon glyphicon-plus"></i>
      <span>Add files...</span>
    </span>
    <button type="submit" class="btn btn-primary start">
      <i class="glyphicon glyphicon-upload"></i>
      <span>Start upload</span>
    </button>
    <button type="reset" class="btn btn-warning cancel">
      <i class="glyphicon glyphicon-ban-circle"></i>
      <span>Cancel upload</span>
    </button>
   </div>
   <div class="col-lg-5">
    <!-- 总体的进度 -->
    <span class="fileupload-process">
     <div id="total-progress" class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
      <div class="progress-bar progress-bar-success" style="width:0%;" data-dz-uploadprogress></div>
     </div>
    </span>
   </div>
  </div>
  <!--
  data-dz-thumbnail:使用后代表该标签是存放缩略图的标签【这里必须是一个 <img /> 元素 ,并且alt 和 src 属性将被 Dropzone改变】
  data-dz-name:存放文件名
  data-dz-errormessage:存放错误信息
  data-dz-size:存放文件大小
  data-dz-remove :删除队列中的文件,或者取消正在从队列上传到服务器的文件
  data-dz-uploadprogress:上传进度【( 当这里有一个 uploadprogress事件时, Dropzone 将更改 style.width 属性从 0% 到 100% )】
  -->
  
  <div class="table table-striped files" id="previews">
   <div id="template" class="file-row">
    <div>
      <span class="preview"><img data-dz-thumbnail /></span>
    </div>
    <div>
      <p class="name" data-dz-name ></p>
      <strong class="error text-danger" data-dz-errormessage></strong>
    </div>
    <div>
      <p class="size" data-dz-size></p>
      <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
        <div class="progress-bar progress-bar-success" style="width:0%;" data-dz-uploadprogress></div>
      </div>
    </div>
    <div>
     <button class="btn btn-primary start">
       <i class="glyphicon glyphicon-upload"></i>
       <span>Start</span>
     </button>
     <button data-dz-remove class="btn btn-warning cancel">
       <i class="glyphicon glyphicon-ban-circle"></i>
       <span>Cancel</span>
     </button>
     <button data-dz-remove class="btn btn-danger delete">
      <i class="glyphicon glyphicon-trash"></i>
      <span>Delete</span>
     </button>
    </div>
   </div>
  </div>
<script>
   // Get the template HTML and remove it from the doument
   var previewNode = document.querySelector("#template");
   previewNode.id = "";
   var previewTemplate = previewNode.parentNode.innerHTML;
   //开始先删除单个文件的布局
   previewNode.parentNode.removeChild(previewNode);
   var myDropzone = new Dropzone(document.body, { // 指定拖拽区为body
    url: "{{ url_for('upload_file') }}", // Set the url
    thumbnailWidth: 80,
    thumbnailHeight: 80,
    parallelUploads: 20,
    previewTemplate: previewTemplate,
    autoQueue: false, // 当队列有文件,是否立刻自动上传到服务器
    previewsContainer: "#previews", // 指定存放文件队列区
    clickable: ".fileinput-button" // 点击某个按钮或区域后出现选择电脑中本地图片,默认是previewsContainer指定的区域
   });
   myDropzone.on("addedfile", function(file) {
    // 让模版中的单个文件可以点击上传
    file.previewElement.querySelector(".start").onclick = function() { myDropzone.enqueueFile(file); };
   });
   // 显示所有文件整体上传进度1-100
   myDropzone.on("totaluploadprogress", function(progress) {
    document.querySelector("#total-progress .progress-bar").style.width = progress + "%";
   });
   
   myDropzone.on("sending", function(file) {
    // 显示整体的上传的进度条,说明:原来是0,所以上面的style.width = progress + "%"即使是100%也看不到
    document.querySelector("#total-progress").style.opacity = "1";
    // 失效上传按钮
    file.previewElement.querySelector(".start").setAttribute("disabled", "disabled");
   });
   // 当没有文件上传时,隐藏进度条
   myDropzone.on("queuecomplete", function(progress) {
    document.querySelector("#total-progress").style.opacity = "0";
   });
   // 上传所有
   document.querySelector("#actions .start").onclick = function() {
     myDropzone.enqueueFiles(myDropzone.getAcceptedFiles());
    //myDropzone.enqueueFiles(myDropzone.getFilesWithStatus(Dropzone.ADDED));与上面一样,可查看源码对比
   };
   //取消所有 
   document.querySelector("#actions .cancel").onclick = function() {
    myDropzone.removeAllFiles(true);
   };
</script>
</body>
</html>

第二种效果与默认的一样

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Flask upload with Dropzone example</title>
  <link rel="stylesheet" href="{{ url_for('static', filename='dropzone.css') }}" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" type="text/css" />
  <script src="{{ url_for('static', filename='jquery.js') }}"></script>
  <script src="{{ url_for('static', filename='dropzone.js') }}"></script>
</head>
<body>
<div id="myId" class="dropzone" style="width: 500px; height: 300px;"></div>
<div id="aaa"></div>
<div id="preview-template" style="display: none;">
  <div class="dz-preview dz-file-preview ">
    <div class="dz-image"><img data-dz-thumbnail /></div>
    <div class="dz-details">
      <div class="dz-filename"><span data-dz-name></span></div>
      <div class="dz-size" data-dz-size></div>
    </div>
    <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>
    <div class="dz-success-mark"><span>✔</span></div>
    <div class="dz-error-mark"><span>✘</span></div>
    <div class="dz-error-message"><span data-dz-errormessage></span></div>
  </div>
</div>
   <script type="text/javascript">
   
    Dropzone.autoDiscover = false;//解决两次实例Dropzone错误,可在控制台看到该错误
    $("#myId").dropzone({ 
    url: "{{ url_for('upload_file') }}",
    addRemoveLinks: true,    
    method: 'post',
    filesizeBase: 1024,
    previewTemplate: $('#preview-template').html(),//如果去掉该选项就会使用默认的
    autoQueue: true,
    init: function() {
        this.on("addedfile", function(file) {
          $(".start").click (function() { 
          this.enqueueFile(file);    
          })    
        });
      }
    }); 
  
   </script>
   
</body>
</html>

demo文件

如果是flask框架可进行测试点击此处下载,如果是php或者其他就看看不必下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
比较简单实用的使用正则三种版本的js去空格处理方法
Nov 18 Javascript
JS分割字符串并放入数组的函数
Jul 04 Javascript
js中split和replace的用法实例
Feb 28 Javascript
AspNet中使用JQuery上传插件Uploadify详解
May 20 Javascript
JS实现的5级联动Select下拉选择框实例
Aug 17 Javascript
JavaScript ES6的新特性使用新方法定义Class
Jun 28 Javascript
javascript加载xml 并解析各节点的值(实现方法)
Oct 12 Javascript
jQuery实现搜索页面关键字的功能
Feb 16 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
Sep 06 jQuery
video.js 一个页面同时播放多个视频的实例代码
Nov 27 Javascript
JavaScript实现随机点名小程序
Oct 29 Javascript
vue递归实现树形组件
Jul 15 Vue.js
React中上传图片到七牛的示例代码
Oct 10 #Javascript
基于对象合并功能的实现示例
Oct 10 #Javascript
聊聊Vue.js的template编译的问题
Oct 09 #Javascript
Vue组件之全局组件与局部组件的使用详解
Oct 09 #Javascript
Angular2监听页面大小变化的解决方法
Oct 09 #Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
Oct 09 #Javascript
input 标签实现输入框带提示文字效果(两种方法)
Oct 09 #Javascript
You might like
一个程序下载的管理程序(三)
2006/10/09 PHP
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
2011/10/17 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
Python中给List添加元素的4种方法分享
2014/11/28 Python
python实现提取百度搜索结果的方法
2015/05/19 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
Python3离线安装Requests模块问题
2019/10/13 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
新西兰优惠网站:Treat Me
2019/07/04 全球购物
企业愿景口号
2015/12/25 职场文书
股东出资协议书
2016/03/21 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
Vue如何实现组件间通信
2021/05/15 Vue.js
教你怎么用python实现字符串转日期
2021/05/24 Python
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang