原生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 25 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
May 31 Javascript
3种不同方式的焦点图轮播特效分享
Oct 30 Javascript
jquery增加时编辑jqGrid(实例代码)
Nov 08 Javascript
jQuery中queue()方法用法实例
Dec 29 Javascript
Javascript基础教程之for循环
Jan 18 Javascript
jQuery使用post方法提交数据实例
Mar 25 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
May 10 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
Jan 03 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
Apr 10 jQuery
详解js中的原型,原型对象,原型链
Jul 16 Javascript
vue中可编辑树状表格的实现代码
Oct 31 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中的错误处理、异常处理机制分析
2012/05/07 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
浅谈php的TS和NTS的区别
2019/03/13 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
jquery中each遍历对象和数组示例
2014/08/05 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
微信小程序实现图片预览功能
2018/01/31 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
Python判断字符串与大小写转换
2015/06/08 Python
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
pytorch 预训练层的使用方法
2019/08/20 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
django配置app中的静态文件步骤
2020/03/27 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
房产转让协议书
2014/04/11 职场文书
植树节活动总结
2014/04/30 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
2014年测量员工作总结
2014/12/12 职场文书
小学教师年度个人总结
2015/02/05 职场文书
小兵张嘎观后感
2015/06/03 职场文书
关于nginx 实现jira反向代理的问题
2021/09/25 Servers