原生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学习笔记(十三) js闭包介绍(转)
Jun 20 Javascript
jquery 获取标签名(tagName)示例代码
Jul 11 Javascript
js对字符的验证方法汇总
Feb 04 Javascript
如何减少浏览器的reflow和repaint
Feb 26 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
Nov 09 Javascript
详解Javascript函数声明与递归调用
Oct 22 Javascript
JS双击变input框批量修改内容
Dec 12 Javascript
jQuery制作图片旋转效果
Feb 02 Javascript
ES6学习之变量的解构赋值
Feb 12 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
Apr 25 Javascript
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
微信小程序实现原生步骤条
Jul 25 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编程之高级技巧——利用Mysql函数
2006/10/09 PHP
php5.2.0内存管理改进
2007/01/22 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
PHP实现小偷程序实例
2016/10/31 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
javascript闭包的高级使用方法实例
2013/07/04 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
python遍历数组的方法小结
2015/04/30 Python
Python数组定义方法
2016/04/13 Python
python3.5 email实现发送邮件功能
2018/05/22 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
高中运动会广播稿
2014/01/21 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
2014年社区工作总结
2014/11/18 职场文书
小学科学课教学反思
2016/02/23 职场文书
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript