您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關如何使用原生js實現文件上傳、下載、封裝等實例的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
一 、下載
1、代碼
const fileDownloadClick = (obj) => { // 解決兼容 if( document.all ){ obj.click(); } else { let event = document.createEvent("MouseEvents"); event.initEvent('click', true, true); obj.dispatchEvent(event); } } const fileDownload = (res,obj) => { // 下載 /* obj :{ userName 下載人 weeklyTime 下載時間 weeklyType 下載類型 } */ let blob = new Blob([res]); let url = window.URL.createObjectURL(blob); let link = document.createElement('a'); link.style.display = 'none'; link.href = url; link.setAttribute('download', `${obj.userName || ' '}_${obj.weeklyTime || dateFormatYMD(new Date())}_${obj.weeklyType || '.xlsx' }`); document.body.appendChild(link); // link.click(); fileDownloadClick(link); window.URL.revokeObjectURL(url); }
2、請求時,需增加請求頭
responseType: 'blob',
3、使用
res: 后臺返回的文件流( 類似于亂碼的東西 ) obj:下載文件名稱 //頁面中調用 this.fileDownload = (res,obj)
二、上傳 ( 基于vue )
1、頁面使用
<input type="file" ref="upload" @change='handleUploadChange($event)' > handleUploadFile(row){ // 通過某一事件觸發 this.$refs['upload'].click(); }, async handleUploadChange(e){ // try{ let res = await this.CommonUpload(e); if(res.code == '200'){ // 獲取其他code值,根據后臺來定 this.handleProjectAddFile(res.data) }else{} } catch(err){} }
2、方法封裝 ( 只判斷大小,也可通過accept判斷要接收的類型 等其他類型 )
CommonUpload(e){ const files = e.target.files; let formData = new FormData(); if(files && files[0]) { const file = files[0]; if(file.size > 1024 * 1024 *3) { alert('文件大小不能超過3M'); return; } else { formData.append("multipartFile", file); } } this.uploadFile_(formData) // 為調用上傳接口方法 }
3、問題 當再次選擇同一文件時,失效
解決: ( 上傳后執行下面 ) this.$refs['upload'].value = ''; // 解決 input file 第二次失效的問題 原因: input file value值為新選中的值,所以下次再選同一文件,不會觸發change事件
感謝各位的閱讀!關于“如何使用原生js實現文件上傳、下載、封裝等實例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。