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.后台图片存储区的图片,显示在页面上。

原文地址:https://www.cnblogs.com/benxiaohai-microcosm/p/8509239.html

时间: 2024-08-11 16:55:17

dropzone.js使用实践的相关文章

ASP.NET MVC中使用Dropzone.js实现图片的批量拖拽上传

说在前面 最近在做一个MVC相册的网站(这里),需要批量上传照片功能,所以就在网上搜相关的插件,偶然机会发现Dropzone.js,试用了一下完全符合我的要求,而且样式挺满意的,于是就在我的项目中使用了这个插件.在使用的过程中发现中文的相关文档较少,说多了都是泪,硬着头皮看官方的网站,本来英文不咋地,只能边查单词边用了,于是就有了这篇文章,主要是总结在使用Dropzone中的遇到的一些问题及详细的使用步骤. Dropzone.js是啥? Dropzone.js是一个开源库,提供拖放文件上传及图像

struts整合dropzone.js上传图片遇到的点问题

问:struts后台无法获取文件对象和文件名称? 答:1. 到dropzone.js搜索"return xhr.send(formData);" 2. 在它前面有个这么句代码: for (i = _m = 0, _ref5 = files.length - 1; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) { formData.append(this._getPara

dropzone.js重写断点续传功能

js文件: var uploaddropzone = new Dropzone("#uploaddropzone",{ url: ctx + "/slider/fileUploadContinue", acceptedFiles: "", maxFiles: 1, autoDiscover : false, addRemoveLinks: true, dictRemoveFile: 'x', dictDefaultMessage: 'Drop f

Dropzone.js实现文件拖拽上传

dropzone.js是一个开源的JavaScript库,提供 AJAX 异步文件上传功能,支持拖拽文件.支持最大文件大小.支持设置文件类型.支持预览上传结果,不依赖jQuery库. 查看演示 下载源码 使用Dropzone 我们可以建立一个正式的上传form表单,并且给表单一个.dropzone的class. <form id="mydropzone" action="/upload.php" class="dropzone">&l

require.js 最佳实践

require.js(官网:http://www.requirejs.org/)是一个js库,相关的基础知识,前面转载了两篇博文:Javascript模块化编程(require.js), Javascript模块化工具require.js教程,RequireJS 参考文章 1. require.js的主要作用是js的工程化,规范化: 1)它是一个js脚本的加载器,它遵循AMD(Asynchronous Module Definition)规范,实现js脚本的异步加载,不阻塞页面的渲染和其后的脚本

Vue.js最佳实践

Vue.js最佳实践 第一招:化繁为简的Watchers 场景还原: created(){ this.fetchPostList() }, watch: { searchInputValue(){ this.fetchPostList() } } 组件创建的时候我们获取一次列表,同时监听input框,每当发生变化的时候重新获取一次筛选后的列表这个场景很常见,有没有办法优化一下呢? 招式解析: 首先,在watchers中,可以直接使用函数的字面量名称:其次,声明immediate:true表示创建

Dropzone.js拖拽上传(简单示例)

今天碰到一个需求,页面上有"点击上传"的按钮,点击可以执行上传事件,从桌面拖拽图片拖拽到任何地方,都可以执行上传,且不影响点击按钮事件.下面是简单示例: 简单示例如下: <!DOCTYPE html> <html> <head> <meta charset="{CHARSET}"> <title></title> <link href="https://cdn.bootcss.c

Doodoo.js 发布 1.1.0,Koa.js+ Nuxt.js 最佳实践

doodoo.js发布1.1.0 -- 中文最佳实践Node.js Web快速开发框架,支持Koa.js, Express.js中间件.包含多项功能改进,及Bug修复.更新内容: 1.[新增]新增支持.js7格式文件2.[新增]新增支持redis密码设置3.[更新]更新默认不连接mysql4.[新增]新增支持mongodb数据库5.[新增]新增支持设置api路由前缀6.[移除]移除默认static静态服务器7.[新增]新增static插件8.[新增]新增自定义plugin9.[新增]新增webh

前端JS 异常处理实践

前端异常处理,常见的场景是在"异步请求"的操作过程当中,所谓"异常"---就是"不正常",程序的运行不符合我们的预期. 程序"正常"的处理,是我们在开发过程当中的"重中之重",是必要的"硬性指标". 而"异常处理",很多时候可能连"指标"都没有,更谈不上什么"硬性指标"了,所以,在开发当中是很容易被忽略的一个"主题&q