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 相关文章推荐
AutoSave/自动存储功能实现
Mar 24 Javascript
javascript 类方法定义还是有点区别
Apr 15 Javascript
js对象之JS入门之Array对象操作小结
Jan 09 Javascript
jQuery和AngularJS的区别浅析
Jan 29 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
Feb 28 Javascript
使用Ajax与服务器(JSON)通信实例
Nov 04 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
Sep 18 Javascript
帝国cms首页列表页实现点赞功能
Oct 30 Javascript
简单理解Vue中的nextTick方法
Jan 30 Javascript
JavaScript变量作用域及内存问题实例分析
Jun 10 Javascript
element中的$confirm的使用
Apr 26 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
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中的float类型使用说明
2010/07/27 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
[原创]PHP字符串中插入子字符串方法总结
2016/05/06 PHP
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
js select option对象小结
2013/12/20 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
2015/08/28 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
python操作MySQL数据库具体方法
2013/10/28 Python
python中requests模块的使用方法
2015/04/08 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
Python内置函数delattr的具体用法
2017/11/23 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
高中家长寄语
2014/04/02 职场文书
产品设计开发计划书
2014/05/07 职场文书
工地安全质量标语
2014/06/07 职场文书
教师个人读书活动总结
2014/07/08 职场文书
开除员工通知
2015/04/22 职场文书
拖欠货款起诉状
2015/05/20 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
2016年中秋节慰问信
2015/12/01 职场文书