element-ui 文件上傳修改文件名的方法示例
技術(shù)背景
Vue + axios + element-ui
問題的產(chǎn)生
一個(gè)美好的周五,我正在愉快地打著代碼,突然收到一封來自產(chǎn)品的神秘消息,線上活動出 BUG 了!吶尼!怎么可能!一定是你的打開方式不對!打開消息截圖,線上的一個(gè)聊天室背景突然變成了另一張毫無關(guān)聯(lián)的圖(一個(gè)大大的太陽),我一看,這不是我剛剛上傳的一個(gè)圖嘛!為什么跑到那里去了!
問題定位
我們所有的靜態(tài)資源(比如圖片)都會上傳到一個(gè)服務(wù)器上,在活動中訪問時(shí)會統(tǒng)一訪問靜態(tài)資源服務(wù)器,而靜態(tài)資源上傳時(shí)并沒有處理重名問題?。?!接口側(cè)僅僅是在前面加了一個(gè)4位數(shù)的隨機(jī)數(shù),也就是說,當(dāng)同名圖片超過 10000 張時(shí),百分百會有圖片被覆蓋??!沒錯(cuò)是直接覆蓋而不是報(bào)錯(cuò)!即使不到10000張,同名數(shù)量越多,被覆蓋概率也就越高。
開始甩鍋
遇到問題不用慌!只要鍋甩的好,一切問題都不是問題!我直接找到后臺負(fù)責(zé)人,描述了一下情況,只見他云淡風(fēng)輕地說了一句:這不是我的 KPI 。???我 ** 你個(gè) xx,男人都是大豬蹄子!靠別人是不行了,只能靠自己,還是自己搞一下吧。
嘗試偷懶
element-ui 屹立這么多年,我相信它一定能夠完成修改文件名的重任,于是滿懷期待地打開官方文檔,很好!不支持!現(xiàn)在是周五晚上六點(diǎn)半,很好,注定又不能好好吃飯了!
攔截文件上傳
文件對象(file)是不能直接修改文件名的,file.name 是只讀屬性,如果你強(qiáng)行賦值,會直接報(bào)錯(cuò),所以只能攔截掉 element-ui -> uploader 的默認(rèn)上傳行為,改為自己上傳。下面為核心 HTML 代碼,主要是利用 before-upload 事件來阻止上傳
<el-upload :before-upload="beforeUpload"> <i class="el-icon-plus" /> </el-upload>
beforeUpload 代碼:既然 file.name 是只讀屬性,那就只能新建一個(gè) file 對象了。你不仁,就不要怪我不義了!新建的文件名為時(shí)間戳 + 原文件名。
beforeUpload(file) {
const timeStamp = new Date() - 0
const copyFile = new File([file], `${timeStamp}_${file.name}`)
this.uploadFile(copyFile)
return false
}
uploadFile 代碼:構(gòu)建一個(gè) FormData 對象,僅此而已!
uploadFile(file) {
const formdata = new FormData()
formdata.append('lbf-file-upload', file)
formdata.append('name', 'lbf-file-upload')
formdata.append('_csrfToken', this.$ajax.getCsrfToken()._csrfToken)
this.postForm(formdata)
}
postForm 代碼:利用 axios 庫上傳到服務(wù)器。
postForm(formdata) {
this.$ajax.post('/xxx/ajax/general/file/files', formdata).then(res => {
if (res.code == null || res.code === 0) {
// do something
} else {
this.$message.error(res.msg || res.message || '文件上傳失敗')
}
}).catch((err) => {
this.$message.error(err.message || '文件上傳失敗')
})
}
就此搞定!以后所有的文件上傳都將自動帶上時(shí)間戳前綴,后臺4位隨機(jī)數(shù)機(jī)制 + 時(shí)間戳 + 文件名,要再想覆蓋,簡直難如程序員找女朋友!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- element-ui 中使用upload多文件上傳只請求一次接口
- element-ui多文件上傳的實(shí)現(xiàn)示例
- element-ui upload組件多文件上傳的示例代碼
- IE9 elementUI文件上傳的問題解決
- vue+elementUI實(shí)現(xiàn)多文件上傳與預(yù)覽功能實(shí)戰(zhàn)記錄(word/PDF/圖片/docx/doc/xlxs/txt)
- Django后端分離 使用element-ui文件上傳方式
- VUE+element-ui文件上傳的示例代碼
- vue+element-ui+axios多文件上傳的實(shí)現(xiàn)并顯示整體進(jìn)度
- elementui+vue+axios實(shí)現(xiàn)文件上傳本地服務(wù)器
- VUE學(xué)習(xí)之Element-ui文件上傳實(shí)例詳解
相關(guān)文章
Vue3封裝自動滾動列表指令(含網(wǎng)頁縮放滾動問題)
本文主要介紹了Vue3封裝自動滾動列表指令(含網(wǎng)頁縮放滾動問題),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
vue+springboot實(shí)現(xiàn)登錄功能
這篇文章主要為大家詳細(xì)介紹了vue+springboot實(shí)現(xiàn)登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
vue中的路由跳轉(zhuǎn)tabBar圖片和文字的高亮效果
這篇文章主要介紹了vue中的路由跳轉(zhuǎn)tabBar圖片和文字的高亮效果,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Vue循環(huán)組件加validate多表單驗(yàn)證的實(shí)例
今天小編就為大家分享一篇Vue循環(huán)組件加validate多表單驗(yàn)證的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09

