HTML5 拖拽批量上傳文件的示例代碼
拖拽批量上傳文件夾
該組件基于 Vue.js 實現(xiàn),UI 框架是 elementUI,完整的 demo 地址在https://github.com/Msxiaoma/upload-folder. 拖拽上傳文件夾(僅僅chrome支持)
一、組件描述
- 同時拖拽多個文件夾
- 刪除指定文件夾
- 顯示當前文件夾的上傳進度條
- 超過5M的文件夾分片上傳
效果如下:
二、遇到的問題
- 拖拽讀取每個文件夾下面的文件路徑
- 如何顯示當前上傳的文件夾的進度條
- 上傳文件時跨域攜帶 cookie
- 文件夾分片
三、解決過程
1. 拖拽讀取每個文件夾下面的文件路徑
在進行拖放操作時, DataTransfer 對象用來保存,通過拖放動作,拖動到瀏覽器的數(shù)據(jù)。它可以保存一項或多項數(shù)據(jù)、一種或者多種數(shù)據(jù)類型
// 拖拽文件夾
dropFolders (e) {
e.stopPropagation()
e.preventDefault()
var items = e.dataTransfer.items
for (var i = 0; i < items.length; i++) {
var item = items[i].webkitGetAsEntry()
if (item) {
this.checkFolders(item)
}
}
}
// 判斷是否為文件夾
checkFolders (item) {
if (item.isDirectory) {
this.traverseFileTree(item)
} else {
this.$alert('只支持上傳文件夾', '提示', {
confirmButtonText: '確定'
})
}
}
traverseFileTree (item, path, parentDir) {
path = path || ''
if (item.isFile) {
item.file((file) => {
let obj = {
file: file,
path: path + file.name,
attr: item.attr
}
this.filesList.push(obj)
})
} else if (item.isDirectory) {
var dirReader = item.createReader()
dirReader.readEntries((entries) => {
for (let i = 0; i < entries.length; i++) {
entries[i].attr = item.attr
this.traverseFileTree(entries[i], path + item.name + '/', temp)
}
}, function (e) {
console.log(e)
})
}
}
2. 上傳文件夾的進度條
沒有分片的文件:根據(jù)文件夾中的文件總數(shù),算出每個文件占文件夾的百分比,當一個文件上傳成功時,修改文件夾 process;
分片的文件:算出每個文件占文件的百分比后,算出每塊文件占文件的百分比,每塊文件上傳成功后,修改文件夾的 process.
3. 跨域攜帶 cookie
當服務(wù)器設(shè)置響應(yīng)頭
Access-Control-Allow-Origin:必須指定明確的、與請求網(wǎng)頁一致的域名,不能為 *。 Access-Control-Allow-Credentials: true
設(shè)置請求頭:
withCredentials:true
補充:
substring 和 substr 的區(qū)別
substr(start [, length ]) 返回一個從指定位置開始的指定長度的子字符串。
start:必選項。所需的子字符串的起始位置。字符串中的第一個字符的索引為 0。
length:可選項。在返回的子字符串中應(yīng)包括的字符個數(shù)。
substring 返回位于 String 對象中指定位置的子字符串,返回一個包含從 start 到最后(不包含 end )的子字符串的字符串
start:指明子字符串的起始位置,該索引從 0 開始起算。
end:指明子字符串的結(jié)束位置,該索引從 0 開始起算。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
- 這篇文章主要介紹了HTML5拖拽文件上傳的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習2021-03-04
- 這篇文章主要介紹了HTML5新特性之type=file文件上傳功能,需要的朋友可以參考下2018-02-02
- HTML5 中提供的文件API在前端中有著豐富的應(yīng)用,上傳、下載、讀取內(nèi)容等在日常的交互中很常見。而且在各個瀏覽器的兼容也比較好,包括移動端,除了 IE 只支持 IE10 以上的2017-07-03
- 本文簡單介紹利用Html5的FormData實現(xiàn)文件的異步上傳,還可以實現(xiàn)上傳進度條和文件大小驗證等,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧2017-05-19
- 本篇文章主要介紹了HTML5拖拉上傳文件的簡單實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-11
使用Html5實現(xiàn)異步上傳文件,支持跨域,帶有上傳進度條
下面小編就為大家?guī)硪黄褂肏tml5實現(xiàn)異步上傳文件,支持跨域,帶有上傳進度條。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-17- 下面小編就為大家?guī)硪黄苿佣薍TML5實現(xiàn)文件上傳功能【附代碼】。小編覺得聽錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-03-25
- 多文件的上傳在以前或許實現(xiàn)起來會很復(fù)雜,不過自從html5的出現(xiàn),讓其變得非常容易,下面有個不錯的示例,大家可以參考下2014-02-13
- HTML5的上傳API可以支持同時選擇多個文件和選擇單個文件夾,但不支持同時選擇多個文件夾,本文就來實現(xiàn)一下HTML5實現(xiàn)同時選擇多個文件夾上傳的使用示例,具有一定的參考價2023-09-28

