您好,登錄后才能下訂單哦!
怎么在HTML5中實(shí)現(xiàn)拖拽上傳文件?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
拖拽批量上傳文件夾
該組件基于 Vue.js 實(shí)現(xiàn),UI 框架是 elementUI,完整的 demo 地址在https://github.com/Msxiaoma/upload-folder. 拖拽上傳文件夾(僅僅chrome支持)
一、組件描述
同時(shí)拖拽多個(gè)文件夾
刪除指定文件夾
顯示當(dāng)前文件夾的上傳進(jìn)度條
超過5M的文件夾分片上傳
二、遇到的問題
拖拽讀取每個(gè)文件夾下面的文件路徑
如何顯示當(dāng)前上傳的文件夾的進(jìn)度條
上傳文件時(shí)跨域攜帶 cookie
文件夾分片
三、解決過程
1. 拖拽讀取每個(gè)文件夾下面的文件路徑
在進(jìn)行拖放操作時(shí), DataTransfer 對(duì)象用來保存,通過拖放動(dòng)作,拖動(dòng)到瀏覽器的數(shù)據(jù)。它可以保存一項(xiàng)或多項(xiàng)數(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ìn)度條
沒有分片的文件:根據(jù)文件夾中的文件總數(shù),算出每個(gè)文件占文件夾的百分比,當(dāng)一個(gè)文件上傳成功時(shí),修改文件夾 process;
分片的文件:算出每個(gè)文件占文件的百分比后,算出每塊文件占文件的百分比,每塊文件上傳成功后,修改文件夾的 process.
3. 跨域攜帶 cookie
當(dāng)服務(wù)器設(shè)置響應(yīng)頭
Access-Control-Allow-Origin:必須指定明確的、與請(qǐng)求網(wǎng)頁一致的域名,不能為 *。 Access-Control-Allow-Credentials: true
設(shè)置請(qǐng)求頭:
withCredentials:true
補(bǔ)充:
substring 和 substr 的區(qū)別
substr(start [, length ]) 返回一個(gè)從指定位置開始的指定長(zhǎng)度的子字符串。
start:必選項(xiàng)。所需的子字符串的起始位置。字符串中的第一個(gè)字符的索引為 0。
length:可選項(xiàng)。在返回的子字符串中應(yīng)包括的字符個(gè)數(shù)。
substring 返回位于 String 對(duì)象中指定位置的子字符串,返回一個(gè)包含從 start 到最后(不包含 end )的子字符串的字符串
start:指明子字符串的起始位置,該索引從 0 開始起算。
end:指明子字符串的結(jié)束位置,該索引從 0 開始起算。
關(guān)于怎么在HTML5中實(shí)現(xiàn)拖拽上傳文件問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。