前端:下载文件(多种方法)

简介: 前端:下载文件(多种方法)

一、简介

前端经常会有下载文件的需求,这里总结了几种常用的方法,方便日后查看。

二、a标签下载

<a href="https://abc.png" download="abc.png" target="view_window">下载</a>

三、window.open下载

downloadTemple() {
      window.open(`url`);
    },

四、location.href

location.href = 'https://a.png';

五、saveAs

saveAs('https://abc.png')

六、loadFileSimply

6.1、loadFileSimply

// loadFileOps.js
import axiosOps from 'axios';
import cookie from 'js-cookie';
import { hasIn } from 'lodash';
import Vue from 'vue';
export const $loadFileSimply = param => {
  let token = cookie.get('token');
  let tenantId = cookie.get('tenantId');
  param.url += param.url.indexOf('?') > -1 ? '&' : '?';
  param.url += `tenantId=${tenantId}&_=${new Date().getTime()}`;
  return new Promise((resolve, reject) => {
    axiosOps({
      url: param.url,
      method: param.method,
      data: param.data,
      params: param.params,
      responseType: 'arraybuffer', // 请求成功时,后端返回文件流,正常导出文件;
      headers: {
        Authorization: `Bearer ${token}`,
        tenantId: tenantId
      },
      timeout: param.timeout ? param.timeout : 5000
    })
      .then(res => {
        resolve(res.data);
      })
      .catch(err => {
        Vue.$notify.error({
          title: '错误提示',
          message: '下载文件失败'
        });
        reject(err)
      });
  });
};

6.2、fileDownload

// 内容转化为文件下载
export const fileDownload = (file, fileName = '下载文件', options) => {
  // 创建隐藏的可下载链接
  let eleLink = document.createElement('a')
  eleLink.download = fileName
  eleLink.style.display = 'none'
  // 字符内容转变成blob地址
  let blob = options ? new Blob([file], options) : new Blob([file])
  eleLink.href = URL.createObjectURL(blob)
  // 触发点击
  document.body.appendChild(eleLink)
  eleLink.click()
  // 然后移除
  document.body.removeChild(eleLink)
}

6.3、使用

import { $loadFileSimply } from '@const/loadFileOps';
import { fileDownload } from '@const/utils.js';
downloadTemple() {
      $loadFileSimply({
        url: downloadUrl,
        method: 'post',
        params: { tempCode: 'SAAS_PUR_ORDER_TEMP' },
      })
        .then((res) => {
          fileDownload(res, '文件名称.xlsx'); // 下载并修改文件名
        })
        .catch(() => {
          this.$message.error('下载模板失败!');
        });
    },

七、url下载

// 地址下载,fileName暂无作用
export const urlDownload = (url, fileName = '下载文件') => {
  // 创建隐藏的可下载链接
  let eleLink = document.createElement('a')
  eleLink.download = fileName
  eleLink.style.display = 'none'
  eleLink.href = url
  // 触发点击
  document.body.appendChild(eleLink)
  eleLink.click()
  // 然后移除
  document.body.removeChild(eleLink)
}

八、多文件下载

/**
 * 以iframe的方式实现的多文件下载
 * @param { urls:array } - 需要下载的内容的数组列表,可以只有一条数据。
 */
export const dnLoadMultipleFiles = (urls) => {
  if (typeof urls !== 'object' || urls.length === 0) return
  urls.forEach(item => {
    const iframe = document.createElement('iframe')
    iframe.style.display = 'none' // 防止影响页面
    iframe.style.height = 0 // 防止影响页面
    iframe.src = item
    document.body.appendChild(iframe) // 这一行必须,iframe挂在到dom树上才会发请求
    // 5分钟之后删除(onload方法对于下载链接不起作用,就先这样吧)
    setTimeout(() => {
      iframe.remove()
    }, 5 * 60 * 1000)
  })
}

九、欢迎交流指正,关注我,一起学习。

相关文章
|
Web App开发 iOS开发
a标签实现文件流下载
a标签实现文件流下载
780 0
|
JSON 前端开发 Go
前端文件下载的方式
【10月更文挑战第5天】
757 58
|
JavaScript 前端开发
JS 下载 URL 链接文件(点击按钮、点击a标签、支持代理与非代理下载)
JS 下载 URL 链接文件(点击按钮、点击a标签、支持代理与非代理下载)
1919 0
|
前端开发 应用服务中间件 nginx
常用前端文件下载方法
经常在项目中会遇到需要下载文件的需求,根据不同的需求和项目实现情况,通常有以下几种做法。
常用前端文件下载方法
|
JavaScript 前端开发
Vue中 实现静态文件下载(以下载表格为例)
Vue中 实现静态文件下载(以下载表格为例)
1869 0
Vue中 实现静态文件下载(以下载表格为例)
|
前端开发
前端接受后端文件流并下载到本地的方法
前端接受后端文件流并下载到本地的方法
3272 0
|
JavaScript
vue2_echarts安装使用
vue2_echarts安装入门
394 0
|
前端开发 容器
使用css实现文字横向滚动循环
要实现文字横向滚动循环效果,可以使用 CSS 的动画和@keyframes关键帧来创建。下面是一个示例,演示如何使用 CSS 实现文字的横向滚动循环:
1453 0
|
存储 JavaScript Java
el 表达式以及JSTL详解
JavaEE中的el 表达式以及JSTL详解
el 表达式以及JSTL详解
|
设计模式 消息中间件 供应链
前端必须掌握的设计模式——发布订阅模式
发布订阅模式(Publish-Subscribe Pattern)是一种设计模式,类似于观察者模式,但通过引入第三方中介实现发布者和订阅者的解耦。发布者不再直接通知订阅者,而是将消息发送给中介,由中介负责分发给订阅者。这种方式提高了异步支持和安全性,适合复杂、高并发场景,如消息队列和流处理系统。代码实现中,通过定义发布者、订阅者和中介接口,确保消息的正确传递。此模式在前端开发中广泛应用,例如Vue的数据双向绑定。