原生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 相关文章推荐
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
Dec 29 Javascript
JQuery 获得绝对,相对位置的坐标方法
Feb 09 Javascript
javascript获取选中的文本的方法代码
Oct 30 Javascript
点击弹出层效果&amp;弹出窗口后网页背景变暗效果的实现代码
Feb 10 Javascript
网页右下角弹出窗体实现代码
Jun 05 Javascript
使用JS实现图片展示瀑布流效果的实例代码
Sep 12 Javascript
BootStrap中
Dec 10 Javascript
BootStrap Datetimepicker 汉化的实现代码
Feb 10 Javascript
详解前后端分离之VueJS前端
May 24 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
Apr 21 Javascript
vue+axios实现post文件下载
Sep 25 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
Jul 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
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
JS跨域总结
2012/08/30 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
浅谈页面装载js及性能分析方法
2014/12/09 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
基于jquery实现多选下拉列表
2017/08/02 jQuery
简单谈谈JS中的正则表达式
2017/09/11 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
python如何在终端里面显示一张图片
2016/08/17 Python
python分割列表(list)的方法示例
2017/05/07 Python
Django数据库操作的实例(增删改查)
2017/09/04 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
Django 实现前端图片压缩功能的方法
2019/08/07 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
浅谈python锁与死锁问题
2020/08/14 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
abstract是什么意思
2012/02/12 面试题
2014三八妇女节活动总结
2014/03/01 职场文书
车间主任岗位职责
2014/03/16 职场文书
保护环境倡议书
2014/04/14 职场文书
快递员岗位职责
2014/09/12 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
建国大业电影观后感
2015/06/01 职场文书
生日赠语
2015/06/23 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书