美文网首页H5
js 文件下载

js 文件下载

作者: 许Y1世承诺 | 来源:发表于2018-05-04 09:35 被阅读0次

项目中我们经常会遇到需要下载文件的功能,静态的文件资源可以使用 a 标签下载,动态的则需要我们通过 js 处理,so 下面封装了一个文件下载的类。

// 文件下载类
class Download {
  /*
  * url 接口地址
  * data 请求数据,默认为 {}
  * */
  constructor(url, data = {}) {
    this.url = url;
    this.data = data;
  }

  // post 方式下载
  post() {
    // 创建一个 form 并设置 action, method, display
    const form = document.createElement('form');
    form.action = this.url;
    form.method = 'post';
    form.style.display = 'none';

    // 遍历参数,依次创建 input 并设置 name,value 然后追加到 form
    Object.keys(this.data).forEach(key => {
      const input = document.createElement('input');
      input.name = key;
      input.value = this.data[key];
      form.appendChild(input);
    });

    // 创建 button 并设置 type 然后追加到 form
    const button = document.createElement('button');
    button.type = 'submit';
    form.appendChild(button);

    // 将 form 追加到 body 并触发提交事件,然后移除 form
    document.body.appendChild(form);
    form.submit();
    document.body.removeChild(form);
  }

  // get 方式下载
  get() {
    const params = [];
    // 遍历参数并 push 到 params
    Object.keys(this.data).forEach(key => {
      params.push(`${key}=${this.data[key]}`);
    });

    // 拼接 url
    const url = params.length ? `${this.url}?${params.join('&')}` : this.url;
    // 创建 iframe 并设置 src,display
    const iframe = document.createElement('iframe');
    iframe.src = url;
    iframe.style.display = 'none';

    // 当触发 iframe 的 onload 事件(下载完成)时移除 iframe
    iframe.onload = () => {
      document.body.removeChild(iframe);
    };
    // 将 iframe 追加到 body
    document.body.appendChild(iframe);
  }
}


// 使用
const url = 'http://www.****.com';
const data = {id: ***};
// post 下载
new Download(url, data).post();
// get 下载
new Download(url, data).get();
项目中我们最好把 Download 类单独放到一个文件,使用时再引入。

github地址,欢迎 star

相关文章

  • laydate 时间选择器组建(一)

    效果图展示 需要引入的js文件 文件下载 html代码 js代码

  • js 文件下载

    项目中我们经常会遇到需要下载文件的功能,静态的文件资源可以使用 a 标签下载,动态的则需要我们通过 js 处理,s...

  • js文件下载

    var a = document.createElement('a');a.href = "url;a.downl...

  • js 下载 文件

    创建upload.js 文件 在需要下载的页面引入

  • js 文件 下载

  • js文件下载

    1.文件流下载 根据后台接口文件流下载 调用 2.文件地址下载 根据文件地址下载文件 调用 3.base64流下载...

  • js -文件下载

    纯前端实现 主要通过a标签的href属性来实现下载功能, download属性规定被下载的超链接目标;downlo...

  • 文件上传下载 antd Upload

    文件上传 antd Upload 入口 UploadUtil.js 文件下载 入口 FileUtil.js api...

  • Vue 使用axios

    1、下载axois 2、在src文件夹在创建http.js文件 3、在main.js 引入http.js文件

  • js-文件的上传和下载

    js-文件的上传和下载

网友评论

    本文标题:js 文件下载

    本文链接:https://www.haomeiwen.com/subject/binrrftx.html