elementui上傳文件不允許重名的解決方案
elementui上傳文件不允許重名
需求:
用戶可以多文件上傳 ,在上傳到服務器之前需要檢查服務器中有無重名的文件,如果有會返回重名文件的名稱數(shù)組,這些文件需要一個一個的向用戶確認是否要覆蓋重傳。確認完畢后再上傳到服務器。
檢查文件重名:
//上傳文件 uploadFile() { let _this = this; // 未選擇文件 if (_this.fileLength === 0) { _this.$message({ message: '請先選擇 [文件] 后在點擊上傳!', type: 'warning' }); return; } // 檢查重名文件 let fileListForm = new FormData(); let noUploadFileList = []; //不覆蓋上傳的 const arrayList = _this.fileList.map(file => file.name); console.log("將要上傳的文件名:", arrayList); arrayList.forEach(fileName => { fileListForm.append("file_name", fileName); }); let fileListConfig = { method: 'post', url: _this.checkFiles, headers: { "Content-Type": "multipart/form-data;charset=utf-8", }, data: fileListForm }; _this.$ajax(fileListConfig) .then(async res => { console.log("檢查是否重復:", res.data); let repeatArray = res.data; // 后端返回重復文件名數(shù)組 if (repeatArray.length > 0) { for (const file of repeatArray) { await _this.deleteRepeat(file, noUploadFileList); } } console.log("noUploadFileList:", noUploadFileList); //進行上傳 //刪除不覆蓋上傳的文件 _this.fileList = _this.fileList.filter(file => !noUploadFileList.includes(file.name)); console.log("新的上傳列表:", _this.fileList); _this.fileLength = _this.fileList.length; if (_this.fileLength === 0) { return; } //進行上傳 await _this.performUpload(); }) .catch(err => { console.log(err); }); },
異步函數(shù),一個一個文件的確定用戶哪些需要覆蓋上傳,
//file:重名文件 //noUploadFileList:不需要覆蓋上傳的文件名數(shù)組 async deleteRepeat(file, noUploadFileList) { let _this = this; try { // 等待用戶的確認 await _this.$confirm(file + '文件已上傳至服務器, 是否覆蓋上傳?', '提示', { confirmButtonText: '確定', cancelButtonText: '取消', type: 'warning' }); // 如果await下面的代碼執(zhí)行了,意味著用戶確認覆蓋 _this.$message({ type: 'success', message: '覆蓋文件成功!' }); } catch (error) { // 如果進入catch塊,意味著用戶點擊了取消 _this.$message({ type: 'success', message: '已取消文件覆蓋!' }); noUploadFileList.push(file); } },
上傳服務器:
performUpload() { let _this = this; // 配置請求的相關參數(shù) //loading開啟 _this.is_loading = true //配置請求的相關參數(shù) let formData = new FormData() let config = { method: 'post', url: this.uploadUrl, headers: { "Content-Type": "multipart/form-data;charset=utf-8", }, data: formData } console.log("正在上傳:", _this.fileList); //單個文件,可編輯作者和文件密級 if (_this.fileLength === 1) { formData.append("file", _this.fileList[0].raw) formData.append("author", _this.edit_author) //默認編寫人為空,密級為非密 if (_this.secret_level === '') { _this.secret_level = 0 } formData.append("confidentiality", _this.secret_level) } //多文件 if (_this.fileLength > 1) { _this.fileList.forEach(file => { formData.append("file", _this.fileList.raw) formData.append("author", _this.edit_author) formData.append("confidentiality", 0) }) } //請求后端 _this.$ajax(config) .then(res => { // console.log(res) if (res) { _this.is_loading = false _this.is_done = true if (_this.is_done) { console.log("上傳成功!?。。。?); _this.$message({ message: '上傳成功', type: 'success' }); _this.fileList = [] _this.show = true } _this.edit_author = '' _this.secret_level = '' } else { _this.is_loading = false _this.$message.error('后臺連接錯誤'); _this.fileList = [] console.log("res failed") } }) .catch(err => { _this.is_loading = false _this.$message.error('后臺連接錯誤'); console.log(err) }) },
ELEMENT UI --UPLOAD組件,上傳的文件名后綴重復問題
在使用Element UI 的Upload組件,發(fā)現(xiàn)上傳的文件名后綴是重復的。(eg. test.pdf.pdf)
在檢查了相關組件的使用,沒有任何問題,最后發(fā)現(xiàn)是windows電腦自動會隱藏文件擴展名,導致用戶以為文件沒有擴展名,繼續(xù)修改成帶后綴的文件名導致。
可以點擊文件--查看--勾選擴展名,既可避免此類錯誤發(fā)生。
到此這篇關于elementui上傳文件不允許重名的文章就介紹到這了,更多相關elementui上傳文件不允許重名內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue3的ref,computed,reactive和toRefs你都了解嗎
這篇文章主要為大家詳細介紹了vue3的ref,computed,reactive和toRefs,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03詳解vuex之store拆分即多模塊狀態(tài)管理(modules)篇
這篇文章主要介紹了詳解vuex之store拆分即多模塊狀態(tài)管理(modules)篇,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11vue3項目如何配置按需自動導入API組件unplugin-auto-import
這篇文章主要介紹了vue3項目如何配置按需自動導入API組件unplugin-auto-import問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03