图片文件拖拽上传预览插件dropzone.js

图片文件拖拽上传预览插件dropzone.js
dropzone.js是一款小巧且轻量级的JavaScript文件上传库,它不依赖于其它像jquery这样的JS库,是个独立的上传插件,而且支持很多定制,它通过 AJAX 异步上传图片文件到服务器,并有图片回显功能,上手很容易。

入门指南

引入依赖库

将下面的这些标签添加到您的HTML的标签中

<link href="./path/to/dropzone.min.css" rel="stylesheet"/>
<script src="./path/to/dropzone.js"></script>

dropzone初始化

新建一个div元素,然后通过如下 JavaScript 代码启用 dropzone(假设你使用了 jQuery插件):
1.CSS方式(加入class=”dropzone”插件自动初始化)

    <form id="uploadForm" action="" class="dropzone">
        <div class="fallback">
            <input name="file" type="file" multiple="multiple"/>
        </div>
        <div class="dz-message">
            点击或拖拽文件在此处上传缩略图
        </div>
    </form>

2.JS方式

<div id="uploadZone"></div>
<script>
    $("#uploadZone").dropzone({
        url: "/upload",
        maxFiles: 10,
        maxFilesize: 512,
        acceptedFiles: ".png,.txt,.jpeg"
    });
</script>

如果你没有使用 jQuery 框架,也可以这样来初始化:

<div id="uploadZone"></div>
<script>
    var dropz = new Dropzone("#uploadZone", {
        url: "/upload",
        maxFiles: 10,
        maxFilesize: 512,
        acceptedFiles: ".png,.txt,.jpeg"
    });
</script>

其中url是必须的值,指定文件上传处理URL。其他的值都是可选的,如果使用默认值的话可以省略。

配置 Dropzone

此插件的特色就在于非常灵活,提供了许多可选项、事件等。下面分类介绍常用的配置项。

功能选项

  • url:最重要的参数,指明了文件提交到哪个页面。
  • method:默认为post,如果需要,可以改为put。
  • paramName:相当于<input>元素的name属性,默认为file。
  • maxFilesize:最大文件大小,单位是 MB。
  • maxFiles:默认为null,可以指定为一个数值,限制最多文件数量。
  • addRemoveLinks:默认false。如果设为true,则会给文件添加一个删除链接。
  • acceptedFiles:指明允许上传的文件类型,格式是逗号分隔的 MIME type 或者扩展名。例如:image/*,application/pdf,.psd,.obj
  • uploadMultiple:指明是否允许 Dropzone 一次提交多个文件。默认为false。如果设为true,则相当于 HTML 表单添加multiple属性。
  • headers:如果设定,则会作为额外的 header 信息发送到服务器。例如:{“custom-header”: “value”}
  • init:一个函数,在 Dropzone 初始化的时候调用,可以用来添加自己的事件监听器。
  • forceFallback:Fallback 是一种机制,当浏览器不支持此插件时,提供一个备选方案。默认为false。如果设为true,则强制 fallback。
  • fallback:一个函数,如果浏览器不支持此插件则调用。
  • 翻译选项
  • dictDefaultMessage:没有任何文件被添加的时候的提示文本。
  • dictFallbackMessage:Fallback 情况下的提示文本。
  • dictInvalidInputType:文件类型被拒绝时的提示文本。
  • dictFileTooBig:文件大小过大时的提示文本。
  • dictCancelUpload:取消上传链接的文本。
  • dictCancelUploadConfirmation:取消上传确认信息的文本。
  • dictRemoveFile:移除文件链接的文本。
  • dictMaxFilesExceeded:超过最大文件数量的提示文本。

添加事件监听

如果你希望在一个事件发生时采取一些额外的操作,而不干扰 Dropzone 的默认行为,那么你应该通过添加事件监听器的办法对事件做出响应,而非重写默认事件函数。

重写默认事件函数的例子如下:
$(“#uploadZone”).dropzone({
addedfile: function() {
//TODO
}
});
如果你重写默认事件函数,该事件发生时插件默认采取的动作将被覆盖。大多数情况下你仅仅想在事件发生时添加自己的行为,那么应该使用on方法。

jQuery 版本:
$("#uploadZone").dropzone({
    init: function() {
        this.on("addedfile", function(file) {
            //TODO
        });
    }
});
非 jQuery 版本:
uploadZone.on("addedfile", function(file) {
    //TODO
});

常用事件

以下事件接收 file 为第一个参数

  • addedfile:添加了一个文件时发生。
  • removedfile:一个文件被移除时发生。你可以监听这个事件并手动从服务器删除这个文件。
  • uploadprogress:上传时按一定间隔发生这个事件。第二个参数为一个整数,表示进度,从 0 到 100。第三个参数是一个整数,表示发送到服务器的字节数。当一个上传结束时,Dropzone 保证会把进度设为 100。注意:这个函数可能被以同一个进度调用多次。
  • success:文件成功上传之后发生,第二个参数为服务器响应。
  • complete:当文件上传成功或失败之后发生。
  • canceled:当文件在上传时被取消的时候发生。
  • maxfilesreached:当文件数量达到最大时发生。
  • maxfilesexceeded:当文件数量超过限制时发生。
    以下事件接收一个 file list 作为第一个参数(仅当uploadMultiple被设为true时才会发生)
  • successmultiple
  • completemultiple
  • cancelmultiple

特殊事件

totaluploadprogress:第一个参数为总上传进度,第二个参数为总字节数,第三个参数为总上传字节数。
例子
这里我使用上面的选项、事件等写了一个例子,供参考:

<div class="uploadZone"></div>
<script>
    $(".uploadZone").dropzone({
        url: "/upload",
        addRemoveLinks: true,
        dictRemoveLinks: "x",
        dictCancelUpload: "x",
        maxFiles: 10,
        maxFilesize: 5,
        acceptedFiles: ".js",
        init: function() {
            this.on("success", function(file) {
                console.log("文件 " + file.name + "成功上传");
            });
            this.on("removedfile", function(file) {
                console.log("文件 " + file.name + "被成功移除");
            });
        }
    });
</script>

the end