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 相关文章推荐
jquery 插件 任意位置浮动固定层
Dec 25 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
Jan 25 Javascript
Javascript中arguments用法实例分析
Jun 13 Javascript
js滑动提示效果代码分享
Mar 10 Javascript
快速掌握jQuery插件开发
Jan 19 Javascript
Vue开发过程中遇到的疑惑知识点总结
Jan 20 Javascript
vue自定v-model实现表单数据双向绑定问题
Sep 03 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
Oct 10 Javascript
javascript关于“时间”的一次探索
Jul 24 Javascript
基于JavaScript实现单例模式
Oct 30 Javascript
vue.config.js中配置Vue的路径别名的方法
Feb 11 Javascript
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 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语法速查表
2007/01/02 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
2015/10/25 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
vue v-model的用法解析
2020/10/19 Javascript
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python网络编程详解
2017/10/31 Python
Python IDLE清空窗口的实例
2018/06/25 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
python实现抖音点赞功能
2019/04/07 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
C#如何进行LDAP用户校验
2012/11/21 面试题
考试没考好检讨书
2014/01/31 职场文书
工程质量承诺书
2014/03/27 职场文书
2014小学教师个人工作总结
2014/11/10 职场文书
保安辞职信范文
2015/02/28 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书