dropzone.js使用实践
官网地址:http://www.dropzonejs.com/
一,它是什么:
DropzoneJS is an open source library that provides drag’n’drop file uploads with image previews.
它是一个开源的带图片预览的可拖拽上传图片的插件。
它具有轻量、不依赖其他库(诸如jQuery)的特点,同时很方便自定义。
二,简单使用:
这里之所以引用了jQuery并不是因为这个插件依赖jQuery,而是因为后文使用的语法,有一些是基于jQuery的。
<!DOCTYPE html>
<html> <head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" href="dist/dropzone.css" />
<script type="text/javascript" src="jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="dist/dropzone.js"></script>
</head> <body>
<div class="dropzone" id="myDropzone">
<div class="am-text-success dz-message">
将文件拖拽到此处<br>或点此打开文件管理器选择文件
</div>
</div>
<script type="text/javascript">
Dropzone.autoDiscover = false;
var myDropzone = new Dropzone("#myDropzone", {
url: "127.0.0.1",
addRemoveLinks: true,
method: 'post',
filesizeBase: 1024,
sending: function(file, xhr, formData) {
formData.append("filesize", file.size);
},
success: function(file, response, e) {
var res = JSON.parse(response);
if(res.error) {
$(file.previewTemplate).children('.dz-error-mark').css('opacity', '1')
}
}
});
</script>
</body> </html>
这样,一个基础的基于Dropzone的文件拖拽上传就完成了。我对这段代码的理解是,这里的拖拽上传,拖拽和上传是连在一起的,拖拽完成,插件会自动上传文件到你指定的URL中。
例子中,我们使用的是非文件域输入框,如果使用type=file类型的input,则可以
而实际场景中,也有一些场合是需要这两个步骤分开完成的,也就是说,拖拽只是把文件放到规定区域内,当单击了上传按钮后,才真的上传文件。这样可以避免用户频繁更换图片而导致的频繁请求。
也有一些场景,上传图片的同时,我们还需要一起提交一些额外的其他数据,比如用户标识等等。因为我们需要区别不同用户上传的照片,也许需要把它们分开处理。
如果使用Dropzone,这两种情况分别该怎么处理呢?
先说第一种,有一种情况下,图片是被转化成二进制数据后上传的。我们假设这里的情况,就是这样,那么,我们希望,用户在单击或者拖拽时,先得到图片的二进制数据,但是,不要上传,当用户单击提交时,再讲这些内容发送到URL中,进行存储。单击之前,每次用户改变图片,本地的二进制数据也随之改变。那么,Dropzone有没有这个机制呢,将获取文件和上传文件分开操作?目前思路是,它有两个方法,分别管理这两个过程,我们可以在方法里进行处理,待查询。
再说第二种,上传图片数据的同时,要附加上传图片上传者的相关信息,-也就是说上传图片的同时,需要提交一些额外的数据。formdata可以通过append添加数据这是一种思路,待验证。
题外话:经常使用图片上传,但是很少仔细的想过图片上传的逻辑。总是以为用户单击上传了,整个过程就完成了。所以,很多东西总是想不通。通过总结Dropzone的使用,顺带也把图片上传逻辑简单理了下。下面,从用户开始上传,一直到下一次用户端调用,做个简单的流程说明:
1.用户通过拖拽或者单击等把图片放到上传框中
2.图片被发送到后台,存储在特定区域,一般情况下,还会系统的生成唯一名称。这个时候,只是图片被重命名后存到了某个存储区里面,它并不能够在数据库中被找到,因为数据库中没有它的相关信息。
3.(一般是通过用户单击提交等操作)图片信息以及其他相关信息,一起被提交到后台,存入数据库。此时,图片的信息才可以通过种种条件筛选等,被查询到,进而被使用。
4.在前端需要调取用户已经上传的图片时,后端从数据库读出图片信息(路径等可以找到图片的信息),前端还原到页面image元素的src属性中。
5.后台图片存储区的图片,显示在页面上。
dropzone.js使用实践的更多相关文章
- ASP.NET MVC中使用Dropzone.js实现图片的批量拖拽上传
说在前面 最近在做一个MVC相册的网站(这里),需要批量上传照片功能,所以就在网上搜相关的插件,偶然机会发现Dropzone.js,试用了一下完全符合我的要求,而且样式挺满意的,于是就在我的项目中使用 ...
- Dropzone.js实现文件拖拽上传
dropzone.js是一个开源的JavaScript库,提供 AJAX 异步文件上传功能,支持拖拽文件.支持最大文件大小.支持设置文件类型.支持预览上传结果,不依赖jQuery库. 使用Dropzo ...
- Vue.js最佳实践
Vue.js最佳实践 第一招:化繁为简的Watchers 场景还原: created(){ this.fetchPostList() }, watch: { searchInputValue(){ t ...
- 上传插件dropzone.js实例
dropzone.js默认是Ajax上传图片给服务器,那么如何获取到图片名呢?其实我们是可以通过dropzone的success函数获取到服务器返回的数据 dropzone.js在HTML的配置如下: ...
- require.js 最佳实践【转】
https://www.cnblogs.com/digdeep/p/4607131.html require.js是一个js库,相关的基础知识,前面转载了两篇博文:Javascript模块化编程(re ...
- require.js 最佳实践
require.js是一个js库,相关的基础知识,前面转载了两篇博文:Javascript模块化编程(require.js), Javascript模块化工具require.js教程,RequireJ ...
- struts整合dropzone.js上传图片遇到的点问题
问:struts后台无法获取文件对象和文件名称? 答:1. 到dropzone.js搜索"return xhr.send(formData);" 2. 在它前面有个这么句代码: f ...
- JavaScript best practices JS最佳实践
JavaScript best practices JS最佳实践 0 简介 最佳实践起初比较棘手,但最终会让你发现这是非常明智之举. 1.合理命名方法及变量名,简洁且可读 var someItem = ...
- django + dropzone.js 上传文件
1.dropzone.js http://www.dropzonejs.com/ dropzone.js是一个可预览\可定制化的文件拖拽上传,实现AJAX异步上传文件的工具 2.dropzone.js ...
随机推荐
- 理解JAVA内存模型
实际上java内存模型是如上图所示一样 每个线程有自己的栈内存,存放共享对象的副本,本地变量 每个线程自己的本地变量是不可见的,但是共享对象对每个线程都是可见的. 如果想实现线程通信的话, 线程对共享 ...
- 工作中MySql的了解到的小技巧
工作中MySql的小技巧 1. 跑脚本时,经常遇到有则更新无插入的 逻辑操作:通常情况下,来一波if()判断然后选择 更新还是插入,前两天逛论坛时发现有人在比较REPLACE INTO 和 INSET ...
- MySQL升级-5.6升级到5.7版本&切换GTID模式
目前未在生产环境中升级过数据库版本,倒是在测试环境跟开发环境升级过. 可以通过mysqldump sql文件进行升级,也可以通过mysql_upgrade升级,前者耗时较长,且 ...
- 有关java中的hashCode问题
1. HashSet集合存储数据的结构(哈希表) 1.1 什么是哈希表? 哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些对象给数组中存放时,那么会 ...
- 听翁恺老师mooc笔记(15)--文件的输入与输出
<>重定向 如果使用标准的printf输出,有一个比较简便的方法,可以将程序的结果写入一个文件.使用<和>符号,将程序运行结果重定向到文件中去,具体使用到的代码如下: ./te ...
- beta冲刺7
前言:最后一篇惹.明天就是正式交差了.有点慌-- 昨天的未完成: 用户试用+测评 输入部分的正则式判定 今天的工作: 登陆界面修改 我的社团显示效果优化 部分信息注册后锁定无法修改 其他部分功能优化 ...
- 201621123040《Java程序设计》第八周学习总结
1.本周学习总结 2.书面作业 2.1ArrayList代码分析 2.1.1解释ArrayList的contains源代码 ArrayList.contain()方法通过调用indexOf()来判断元 ...
- hi-nginx-1.4.2发布,多项重要更新
支持多种编程语言混合开发web应用的通用服务器hi-nginx-1.4.2已经发布了. 此次发布包含多项重要更新: 支持python2和3,通过编译选项--with-http-hi-python-ve ...
- 织梦cms/dedecms清理冗余废弃未引用图片方法
原理描述: 在原有织梦后台菜单中增加"清理冗余图片按钮",实现清理冗余图片的功能. 操作步骤: 1. 打开后台dede\sys_sql_query.php代码 在该文件中搜索如下代 ...
- pythoncharm 中解决启动server时出现 “django.core.exceptions.ImproperlyConfigured: Requested setting DEBUG, but settings are not configured”的错误
背景介绍 最近,尝试着用pythoncharm 这个All-star IDE来搞一搞Django,于是乎,下载专业版,PJ等等一系列操作之后,终于得偿所愿.可以开工了. 错误 在园子里找了一篇初学者的 ...