原生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实现层随着内容大小动态渐变改变 推荐
Dec 19 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
Jun 08 Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
Feb 20 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
Jan 10 Javascript
AngularJS Phonecat实例讲解
Nov 21 Javascript
vue组件watch属性实例讲解
Nov 07 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
Jul 15 Javascript
keep-alive不能缓存多层级路由菜单问题解决
Mar 10 Javascript
jQuery 动态粒子效果示例代码
Jul 07 jQuery
vue 在methods中调用mounted的实现操作
Aug 07 Javascript
vue实现几秒后跳转新页面代码
Sep 09 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数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
ThinkPHP实现递归无级分类――代码少
2015/07/29 PHP
深入学习微信网址链接解封的防封原理visit_type
2019/08/15 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
潜说js对象和数组
2011/05/25 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
详解Python异常处理中的Finally else的功能
2017/12/29 Python
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
Python实现删除排序数组中重复项的两种方法示例
2019/01/31 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
华为c/c++笔试题
2016/01/25 面试题
Delphi笔试题
2016/11/14 面试题
2014新年元旦活动策划方案
2014/02/18 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL
Java SSH 秘钥连接mysql数据库的方法
2021/06/28 Java/Android