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 相关文章推荐
onpropertypchange
Jul 01 Javascript
最新的10款jQuery内容滑块插件分享
Sep 18 Javascript
原生javascript和jquery判断浏览器版本等信息
Jul 04 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
Jan 10 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
Aug 30 Javascript
Javascript快速排序算法详解
Dec 03 Javascript
JS实现的仿淘宝交易倒计时效果
Nov 27 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
Jan 04 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
Feb 22 Javascript
JS加载器如何动态加载外部js文件
May 26 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
Mar 08 Javascript
vue脚手架中配置Sass的方法
Jan 04 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遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
laravel学习教程之存取器
2016/07/30 PHP
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
原生js制作简单的数字键盘
2015/04/24 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
javascript 小数乘法结果错误的处理方法
2016/07/28 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
用Python进行行为驱动开发的入门教程
2015/04/23 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
python如何生成网页验证码
2018/07/28 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
AJax面试题
2014/11/25 面试题
商务助理岗位职责
2013/11/13 职场文书
杠杆的科学教学反思
2014/01/10 职场文书
《胖乎乎的小手》教学反思
2014/02/26 职场文书
关于安全演讲稿
2014/05/09 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书