原生js实现文件上传、下载、封装等实例方法


Posted in Javascript onJanuary 05, 2020

一 、下载

1、代码

const fileDownloadClick = (obj) => { // 解决兼容
 if( document.all ){
  obj.click();
 } else {
  let event = document.createEvent("MouseEvents");
  event.initEvent('click', true, true);
  obj.dispatchEvent(event);
 }
}
const fileDownload = (res,obj) => { // 下载
  /*
  obj :{
   userName  下载人
   weeklyTime 下载时间
   weeklyType 下载类型 
  }
 */ 
 let blob = new Blob([res]);
 let url = window.URL.createObjectURL(blob);
 let link = document.createElement('a');
 link.style.display = 'none';
 link.href = url;
 link.setAttribute('download', `${obj.userName || ' '}_${obj.weeklyTime || dateFormatYMD(new Date())}_${obj.weeklyType || '.xlsx' }`);
 document.body.appendChild(link);
 // link.click();
 fileDownloadClick(link);
 window.URL.revokeObjectURL(url);
}

2、请求时,需增加请求头

responseType: 'blob',

3、使用

res: 后台返回的文件流( 类似于乱码的东西 )
obj:下载文件名称

//页面中调用
this.fileDownload = (res,obj)

二、上传 ( 基于vue )

1、页面使用

<input type="file" ref="upload" @change='handleUploadChange($event)' style="display:none;">



 handleUploadFile(row){ // 通过某一事件触发 
  this.$refs['upload'].click();
 },
 
 

  async handleUploadChange(e){ // 
   try{
    let res = await this.CommonUpload(e);
    if(res.code == '200'){ // 获取其他code值,根据后台来定
      this.handleProjectAddFile(res.data)
    }else{}
   }

catch(err){}

}

2、方法封装 ( 只判断大小,也可通过accept判断要接收的类型 等其他类型 )

CommonUpload(e){ 
    const files = e.target.files;
    let formData = new FormData();
    if(files && files[0]) {
      const file = files[0];
      if(file.size > 1024 * 1024 *3) {
        alert('文件大小不能超过3M');
        return;
      } else {
        formData.append("multipartFile", file); 
      }
    }
    this.uploadFile_(formData) // 为调用上传接口方法
  }

3、问题 当再次选择同一文件时,失效

解决: ( 上传后执行下面 )
this.$refs['upload'].value = ''; // 解决 input file 第二次失效的问题

原因:
input file value值为新选中的值,所以下次再选同一文件,不会触发change事件

以上就是本次介绍的全部相关知识点,如果有任何疑问和补充大家可以联系小编,感谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Jquery 弹出层插件实现代码
Oct 24 Javascript
JavaScript 利用Cookie记录用户登录信息
Dec 08 Javascript
JavaScript学习笔记之基础语法
Jan 22 Javascript
jQuery中extend函数详解
Feb 13 Javascript
JavaScript通过代码调用Flash显示的方法
Feb 02 Javascript
Bootstrap select多选下拉框实现代码
Dec 23 Javascript
canvas绘制表盘时钟
Jan 23 Javascript
解决vue select当前value没有更新到vue对象属性的问题
Aug 30 Javascript
微信小程序组件传值图示过程详解
Jul 31 Javascript
javascript随机变色实例代码
Oct 15 Javascript
vue中使用rem布局代码详解
Oct 30 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
Dec 20 Javascript
详解jQuery中的prop()使用方法
Jan 05 #jQuery
vue 对axios get pust put delete封装的实例代码
Jan 05 #Javascript
JavaScript修改注册表实例代码
Jan 05 #Javascript
详解JavaScript修改注册表的方法
Jan 05 #Javascript
js判断非127开头的IP地址的实例代码
Jan 05 #Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
Jan 05 #Javascript
分享JS表单验证源码(带错误提示及密码等级)
Jan 05 #Javascript
You might like
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
asp.net和php的区别点总结
2019/10/10 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
基于jQuery的history历史记录插件
2010/12/11 Javascript
jQuery1.4.2与老版本json格式兼容的解决方法
2011/02/12 Javascript
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
一览画面点击复选框后获取多个id值的方法
2016/05/30 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
Angular中支持SCSS的方法
2017/11/18 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
python3使用urllib模块制作网络爬虫
2016/04/08 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
python标记语句块使用方法总结
2019/08/05 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
python help函数实例用法
2020/12/06 Python
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
C语言面试题
2013/05/19 面试题
吸烟检讨书2000字
2014/02/13 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
兴趣班停课通知
2015/04/24 职场文书
小学校本教研总结
2015/08/13 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
python装饰器代码解析
2022/03/23 Python