码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 前端:下载文件(多种方法)


    一、简介

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

    二、a标签下载

    下载

    三、window.open下载

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

    四、location.href

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

    五、saveAs

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

    六、loadFileSimply

    6.1、loadFileSimply

    1. // loadFileOps.js
    2. import axiosOps from 'axios';
    3. import cookie from 'js-cookie';
    4. import { hasIn } from 'lodash';
    5. import Vue from 'vue';
    6. export const $loadFileSimply = param => {
    7. let token = cookie.get('token');
    8. let tenantId = cookie.get('tenantId');
    9. param.url += param.url.indexOf('?') > -1 ? '&' : '?';
    10. param.url += `tenantId=${tenantId}&_=${new Date().getTime()}`;
    11. return new Promise((resolve, reject) => {
    12. axiosOps({
    13. url: param.url,
    14. method: param.method,
    15. data: param.data,
    16. params: param.params,
    17. responseType: 'arraybuffer', // 请求成功时,后端返回文件流,正常导出文件;
    18. headers: {
    19. Authorization: `Bearer ${token}`,
    20. tenantId: tenantId
    21. },
    22. timeout: param.timeout ? param.timeout : 5000
    23. })
    24. .then(res => {
    25. resolve(res.data);
    26. })
    27. .catch(err => {
    28. Vue.$notify.error({
    29. title: '错误提示',
    30. message: '下载文件失败'
    31. });
    32. reject(err)
    33. });
    34. });
    35. };

    6.2、fileDownload

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

    6.3、使用

    1. import { $loadFileSimply } from '@const/loadFileOps';
    2. import { fileDownload } from '@const/utils.js';
    3. downloadTemple() {
    4. $loadFileSimply({
    5. url: downloadUrl,
    6. method: 'post',
    7. params: { tempCode: 'SAAS_PUR_ORDER_TEMP' },
    8. })
    9. .then((res) => {
    10. fileDownload(res, '文件名称.xlsx'); // 下载并修改文件名
    11. })
    12. .catch(() => {
    13. this.$message.error('下载模板失败!');
    14. });
    15. },

    七、url下载

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

    八、多文件下载

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

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

    十、参考链接:

    前端如何实现文件下载(七种方法)_前端程序的博客-CSDN博客_前端下载文件

    axios请求设置responseType为'blob'或'arraybuffer'下载文件时,正确处理返回值为文件流或json对象的情况_倔强的小绵羊的博客-CSDN博客

    axios 的responseType 类型动态设置_江小沫的博客-CSDN博客_axios responsetype

  • 相关阅读:
    go基础09-Go语言的字符串类型
    【IoT毕设.下】STM32+机智云AIoT+实验室安全监控系统
    【DesignMode】设计模式简介
    mongodb创建管理账户步骤
    2022秋冬穿搭趋势!小红书榜单,挖掘4大时髦模式
    C#ListView的单元格支持添加基本及自定义任意控件
    本地存储WebStorage
    【MySQL进阶简写】
    制作一个简单HTML西安旅游网页(HTML+CSS)
    【正点原子STM32连载】 第二十七章 RTC实时时钟实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  • 原文地址:https://blog.csdn.net/snowball_li/article/details/126657300
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号