element-ui 文件上传修改文件名的方法示例


Posted in Javascript onNovember 05, 2019

技术背景

Vue + axios + element-ui

问题的产生

一个美好的周五,我正在愉快地打着代码,突然收到一封来自产品的神秘消息,线上活动出 BUG 了!呐尼!怎么可能!一定是你的打开方式不对!打开消息截图,线上的一个聊天室背景突然变成了另一张毫无关联的图(一个大大的太阳),我一看,这不是我刚刚上传的一个图嘛!为什么跑到那里去了!

问题定位

我们所有的静态资源(比如图片)都会上传到一个服务器上,在活动中访问时会统一访问静态资源服务器,而静态资源上传时并没有处理重名问题!!!接口侧仅仅是在前面加了一个4位数的随机数,也就是说,当同名图片超过 10000 张时,百分百会有图片被覆盖!!没错是直接覆盖而不是报错!即使不到10000张,同名数量越多,被覆盖概率也就越高。

开始甩锅

遇到问题不用慌!只要锅甩的好,一切问题都不是问题!我直接找到后台负责人,描述了一下情况,只见他云淡风轻地说了一句:这不是我的 KPI 。???我 ** 你个 xx,男人都是大猪蹄子!靠别人是不行了,只能靠自己,还是自己搞一下吧。

尝试偷懒

element-ui 屹立这么多年,我相信它一定能够完成修改文件名的重任,于是满怀期待地打开官方文档,很好!不支持!现在是周五晚上六点半,很好,注定又不能好好吃饭了!

拦截文件上传

文件对象(file)是不能直接修改文件名的,file.name 是只读属性,如果你强行赋值,会直接报错,所以只能拦截掉 element-ui -> uploader 的默认上传行为,改为自己上传。下面为核心 HTML 代码,主要是利用 before-upload 事件来阻止上传

<el-upload :before-upload="beforeUpload">
  <i class="el-icon-plus" />
</el-upload>

beforeUpload 代码:既然 file.name 是只读属性,那就只能新建一个 file 对象了。你不仁,就不要怪我不义了!新建的文件名为时间戳 + 原文件名。

beforeUpload(file) {
  const timeStamp = new Date() - 0
  const copyFile = new File([file], `${timeStamp}_${file.name}`)
  this.uploadFile(copyFile)
  return false
}

uploadFile 代码:构建一个 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 库上传到服务器。

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 || '文件上传失败')
  })
}

就此搞定!以后所有的文件上传都将自动带上时间戳前缀,后台4位随机数机制 + 时间戳 + 文件名,要再想覆盖,简直难如程序员找女朋友!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS操作Cookies包括(读取添加与删除)
Dec 26 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
Jan 16 Javascript
JavaScript设计模式之工厂模式和构造器模式
Feb 11 Javascript
js仿淘宝和百度文库的评分功能
May 15 Javascript
JS实现图片的不间断连续滚动的简单实例
Jun 03 Javascript
手机端实现Bootstrap简单图片轮播效果
Oct 13 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
Dec 06 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
Dec 05 Javascript
微信小程序使用swiper组件实现层叠轮播图
Nov 04 Javascript
JS为什么说async/await是generator的语法糖详解
Jul 11 Javascript
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
Oct 25 Javascript
JavaScript实现两个数组的交集
Mar 25 Javascript
vue keep-alive 动态删除组件缓存的例子
Nov 04 #Javascript
javascript如何实现create方法
Nov 04 #Javascript
关于vue里页面的缓存详解
Nov 04 #Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
Nov 04 #Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
Nov 04 #Javascript
vue实现权限控制路由(vue-router 动态添加路由)
Nov 04 #Javascript
Vue路由对象属性 .meta $route.matched详解
Nov 04 #Javascript
You might like
十天学会php之第六天
2006/10/09 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
js同源策略详解
2015/05/21 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
在Django的URLconf中使用命名组的方法
2015/07/18 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
Python使用Pygame绘制时钟
2020/11/29 Python
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
肯尼迪就职演说稿
2013/12/31 职场文书
个人评价范文分享
2014/01/11 职场文书
测量工程专业求职信
2014/02/24 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
先进教师事迹材料
2014/12/16 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
老公保证书怎么写
2015/02/26 职场文书
部门主管竞聘书
2015/09/15 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP