原生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隔行变色与普通JS写法的对比
Apr 21 Javascript
iframe父页面获取子页面参数的方法
Feb 21 Javascript
简介JavaScript中toTimeString()方法的使用
Jun 12 Javascript
$.extend 的一个小问题
Jun 18 Javascript
易操作的jQuery表单提示插件
Dec 01 Javascript
Bootstrap模仿起筷首页效果
May 09 Javascript
微信小程序 页面传值详解
Mar 10 Javascript
canvas实现刮刮卡效果
Mar 14 Javascript
详解如何用模块化的方式写vuejs
Dec 16 Javascript
vue-cli初始化项目中使用less的方法
Aug 09 Javascript
简单了解JavaScript中的执行上下文和堆栈
Jun 24 Javascript
canvas多重阴影发光效果实现
Apr 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
phpmyadmin的#1251问题
2006/11/25 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
Python中itertools模块用法详解
2014/09/25 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
python使用folium库绘制地图点击框
2018/09/21 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
精致的手工皮鞋:Shoe Embassy
2019/11/08 全球购物
个人自我鉴定
2013/11/07 职场文书
《珍珠泉》教学反思
2014/02/20 职场文书
购房委托书
2014/10/15 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js