原生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 实现二级/三级/多级联动菜单的思路及代码
Apr 08 Javascript
js 绑定键盘鼠标事件示例代码
Feb 12 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
Jun 12 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
Nov 17 Javascript
jQuery添加和删除输入文本框标签代码
May 20 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
Nov 21 Javascript
jQuery的事件预绑定
Dec 05 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
Jun 17 Javascript
Node.js 实现远程桌面监控的方法步骤
Jul 02 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
Sep 04 Javascript
vue实现输入一位数字转汉字功能
Dec 13 Javascript
JavaScript计算出两个数的差值
Mar 19 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
PHP4(windows版本)中的COM函数
2006/10/09 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
php+ajax实现无刷新动态加载数据技术
2015/04/28 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
网页图片延时加载的js代码
2010/04/22 Javascript
js function使用心得
2010/05/10 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
webpack的 rquire.context用法实现工程自动化的方法
2020/02/07 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
详解ES6 中的Object.assign()的用法实例代码
2021/01/11 Javascript
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
Random 在 Python 中的使用方法
2018/08/09 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
Python列表对象实现原理详解
2019/07/01 Python
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
2016年春季运动会广播稿
2015/08/19 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书