JavaScript 檔案拖拽上傳插件 dropzone.js 介紹
February 19, 2014 / 程式設計指南
dropzone.js 是一個開源的 JavaScript 庫,提供 AJAX 異步上傳功能。
安裝
下載下傳
dropzone.js
檔案并添加到頁面中即可。Dropzone 不依賴 jQuery 架構。
啟用
可以建立一個
div
元素,然後通過如下 JavaScript 代碼啟用 dropzone(如果你使用 jQuery):
<div id="dropz"></div>
<script>
$("#dropz").dropzone({
url: "handle-upload.php",
maxFiles: 10,
maxFilesize: 512,
acceptedFiles: ".js,.obj,.dae"
});
</script>
如果你沒有使用 jQuery 架構,也可以這樣來初始化:
<div id="dropz"></div>
<script>
var dropz = new Dropzone("#dropz", {
url: "handle-upload.php",
maxFiles: 10,
maxFilesize: 512,
acceptedFiles: ".js,.obj,.dae"
});
</script>
其中
url
是必須的值,指明檔案上傳送出到哪個頁面。其他的值都是可選的,如果使用預設值的話可以省略。
接收檔案
Dropzone 并不含任何伺服器端的支援和實作,利用 Dropzone 上傳檔案和利用下面基本的 HTML 表單對于伺服器來說是一樣的:
<form action="handle-upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file">
</form>
配置 Dropzone
此插件的特色就在于非常靈活,提供了許多可選項、事件等。下面分類介紹常用的配置項。
功能選項
-
:最重要的參數,指明了檔案送出到哪個頁面。url
-
:預設為method
,如果需要,可以改為post
。put
-
:相當于paramName
元素的<input>
屬性,預設為name
file
-
:最大檔案大小,機關是 MB。maxFilesize
-
maxFiles
,可以指定為一個數值,限制最多檔案數量。null
-
:預設addRemoveLinks
。如果設為false
,則會給檔案添加一個删除連結。true
-
:指明允許上傳的檔案類型,格式是逗号分隔的 MIME type 或者擴充名。例如:acceptedFiles
image/*,application/pdf,.psd,.obj
-
:指明是否允許 Dropzone 一次送出多個檔案。預設為uploadMultiple
false
,則相當于 HTML 表單添加true
屬性。multiple
-
:如果設定,則會作為額外的 header 資訊發送到伺服器。例如:headers
{"custom-header": "value"}
-
:一個函數,在 Dropzone 初始化的時候調用,可以用來添加自己的事件監聽器。init
-
:Fallback 是一種機制,當浏覽器不支援此插件時,提供一個備選方案。預設為forceFallback
false
,則強制 fallback。true
-
:一個函數,如果浏覽器不支援此插件則調用。fallback
翻譯選項
-
:沒有任何檔案被添加的時候的提示文本。dictDefaultMessage
-
情況下的提示文本。dictFallbackMessage:Fallback
-
:檔案類型被拒絕時的提示文本。dictInvalidInputType
-
:檔案大小過大時的提示文本。dictFileTooBig
-
:取消上傳連結的文本。dictCancelUpload
-
:取消上傳确認資訊的文本。dictCancelUploadConfirmation
-
:移除檔案連結的文本。dictRemoveFile
-
:超過最大檔案數量的提示文本。dictMaxFilesExceeded
添加事件監聽
如果你希望在一個事件發生時采取一些額外的操作,而不幹擾 Dropzone 的預設行為,那麼你應該通過添加事件監聽器的辦法對事件做出響應,而非重寫預設事件函數。
重寫預設事件函數的例子如下:
$("#dropz").dropzone({
addedfile: function() {
// actions...
}
});
如果你重寫預設事件函數,該事件發生時插件預設采取的動作将被覆寫。大多數情況下你僅僅想在事件發生時添加自己的行為,那麼應該使用
on
方法。
jQuery 版本:
$("#dropz").dropzone({
init: function() {
this.on("addedfile", function(file) {
// actions...
});
}
});
非 jQuery 版本:
dropz.on("addedfile", function(file) {
// actions...
});
常用事件
以下事件接收 file 為第一個參數
-
:添加了一個檔案時發生。addedfile
-
:一個檔案被移除時發生。你可以監聽這個事件并手動從伺服器删除這個檔案。removedfile
-
:上傳時按一定間隔發生這個事件。第二個參數為一個整數,表示進度,從 0 到 100。第三個參數是一個整數,表示發送到伺服器的位元組數。當一個上傳結束時,Dropzone 保證會把進度設為 100。注意:這個函數可能被以同一個進度調用多次。uploadprogress
-
:檔案成功上傳之後發生,第二個參數為伺服器響應。success
-
:當檔案上傳成功或失敗之後發生。complete
-
:當檔案在上傳時被取消的時候發生。canceled
-
:當檔案數量達到最大時發生。maxfilesreached
-
:當檔案數量超過限制時發生。maxfilesexceeded
以下事件接收一個 file list 作為第一個參數(僅當
uploadMultiple
被設為
true
時才會發生)
-
successmultiple
-
completemultiple
-
cancelmultiple
特殊事件
-
:第一個參數為總上傳進度,第二個參數為總位元組數,第三個參數為總上傳位元組數。totaluploadprogress
例子
這裡我使用上面的選項、事件等寫了一個例子,供參考:
<div class="dropz"></div>
<script>
$(".dropz").dropzone({
url: "handle-upload.php",
addRemoveLinks: true,
dictRemoveLinks: "x",
dictCancelUpload: "x",
maxFiles: 10,
maxFilesize: 5,
acceptedFiles: ".js",
init: function() {
this.on("success", function(file) {
console.log("File " + file.name + "uploaded");
});
this.on("removedfile", function(file) {
console.log("File " + file.name + "removed");
});
}
});
</script>
外觀
Dropzone 下載下傳之後沒有自帶任何 CSS 樣式(人家隻有一個 js 檔案嘛)。我覺得官網提供的 Demo 的外觀設計就非常不錯,可以供大家參考。
熬夜不易,點選請老王喝杯烈酒!!!!!!!