原生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 相关文章推荐
学习js所必须要知道的一些
Mar 07 Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
Jul 08 Javascript
javascript教程之不完整的继承(js原型链)
Jan 13 Javascript
kindeditor修复会替换script内容的问题
Apr 03 Javascript
Javascript显示和隐藏ul列表的方法
Jul 15 Javascript
JavaScript Math 对象常用方法总结
Apr 28 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
May 25 Javascript
Javascript单例模式的介绍和实例
Oct 08 Javascript
纯JS代码实现隔行变色鼠标移入高亮
Nov 23 Javascript
vue组件父子间通信详解(三)
Nov 07 Javascript
详解如何在项目中使用jest测试react native组件
Feb 09 Javascript
JavaScript动态创建二维数组的方法示例
Feb 01 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
实用函数10
2007/11/08 PHP
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
php文件上传的简单实例
2013/10/19 PHP
PHP比你想象的好得多
2014/11/27 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
js调用flash的效果代码
2008/04/26 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
element上传组件循环引用及简单时间倒计时的实现
2018/10/01 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
介绍Python中内置的itertools模块
2015/04/29 Python
tensorflow 输出权重到csv或txt的实例
2018/06/14 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
酒店应聘自荐信
2013/11/09 职场文书
教师队伍管理制度
2014/01/14 职场文书
民族精神月活动总结
2014/08/28 职场文书
大学生作弊检讨书
2014/09/11 职场文书
公司股东合作协议书
2014/09/14 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
见习报告格式范文
2014/11/08 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技