原生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 相关文章推荐
JavaScript 继承详解(一)
Jul 13 Javascript
js判断输入是否为数字的具体实例
Aug 03 Javascript
简单实现JS对dom操作封装
Dec 02 Javascript
基于javascript实现最简单的选项卡切换效果
May 16 Javascript
Javascript如何判断数据类型和数组类型
Jun 22 Javascript
JavaScript中ES6字符串扩展方法
Aug 26 Javascript
基于Vue实现页面切换左右滑动效果
Jun 29 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
Aug 16 Javascript
浅谈在Vue-cli里基于axios封装复用请求
Nov 06 Javascript
Vue shopCart 组件开发详解
Jan 26 Javascript
Vue.js递归组件实现组织架构树和选人功能
Jul 04 Javascript
小程序实现点击tab切换左右滑动
Nov 16 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
PHP5函数小全(分享)
2013/06/06 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
Python的gevent框架的入门教程
2015/04/29 Python
使用python实现BLAST
2018/02/12 Python
Python内置函数reversed()用法分析
2018/03/20 Python
python微信撤回监测代码
2019/04/29 Python
python实现自动化上线脚本的示例
2019/07/01 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
中专生的个人自我评价
2013/12/11 职场文书
入党积极分子自我鉴定范文
2014/03/25 职场文书
激励员工的口号
2014/06/16 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
实用求职信模板范文
2019/05/13 职场文书
HR必备:超全面的薪酬待遇管理方案!
2019/07/12 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android