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

这篇具有很好参考价值的文章主要介绍了前端:下载文件(多种方法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

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

二、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)
  })
}

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

十、参考链接:

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

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

axios 的responseType 类型动态设置_江小沫的博客-CSDN博客_axios responsetype文章来源地址https://www.toymoban.com/news/detail-642018.html

到了这里,关于前端:下载文件(多种方法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端(vue)文件流下载

    前端(vue)文件流下载 3.一般下载都得首先去触发点击,点击后下载。点击时候去拿到下载文件的下载文件名,下载数据流,下载的类型,请求content-type 要设置为 application/octet-stream(二进制流数据),这样我们的的参数就全齐了 4.拓展 ,在http请求中,一般接口相应得是20

    2024年02月12日
    浏览(28)
  • windows.open 在vue前端实现文件下载(自定义下载文件名)

    1. 将要下载的文件放在前端项目的 assets 文件夹内  我要下载的文件为  src/assrts/xxx/xxx模板.csv  2. 在页面创建下载按钮    3. 导入该文件 4. 在build文件夹下的webpack.base.conf.js 文件中,添加csv(或者其他)解析类型 5. 编写下载方法 参考自:vue 实现本地excel文件下载功能_璐哈

    2024年02月05日
    浏览(39)
  • StreamSaver.js入门教程:优雅解决前端下载文件的难题

    点赞 + 关注 + 收藏 = 学会了 本文介绍一个能让前端优雅下载大文件的工具:StreamSaver.js ⚡️ StreamSaver.js GitHub地址 ⚡️ 官方案例 StreamSaver.js 可用于实现在Web浏览器中直接将大文件流式传输到用户设备的功能。 传统的下载方式可能导致大文件的加载时间较长或造成内存占用过

    2024年02月08日
    浏览(38)
  • 【前端】下载文件方法

    我最初使用的方法就是这个,只要提供了文件的服务器地址,使用 window.open 也就是在新窗口打开,这时浏览器会自动执行下载。 其实window.open和a标签是一样的,只是a标签是要用户点击触发,而window.open可以主动触发 后端如果设置了Content-Disposition ,那么不需要download属性也能

    2024年01月24日
    浏览(25)
  • vue前端预览pdf并加水印、ofd文件,控制打印、下载、另存,vue-pdf的使用方法以及在开发中所踩过的坑合集

    根据公司的实际项目需求,要求实现对pdf和ofd文件的预览,并且需要限制用户是否可以下载、打印、另存pdf、ofd文件,如果该用户可以打印、下载需要控制每个用户的下载次数以及可打印的次数。正常的预览pdf很简单,直接调用浏览器的预览就可以而且功能也比较全,但是一

    2024年02月16日
    浏览(131)
  • 【Java 实现文件下载】vue前端+java后端实现文件下载详解(附源码)

    【 写在前面 】前端时间总结了一下有关java文件上传的功能,也给不少读者带来一些帮助,因此今天继续完善文件下载这套体系,希望能给屏幕前的您带来实质性的帮助,其实文件下载最怕的就是中文乱码的现象,当然这个我单独写了一篇文章解释,这里不做详谈。 涉及知识

    2024年02月09日
    浏览(33)
  • 前端实现下载文件的方法汇总

    对于前端来说,下载文件是一个特别常见的需求。但是前端要根据后端返回的内容,来选择下载文件的具体方法。通常情况下,后端要么给你 返回文件的网络地址 ,要么 返回文件流 。返回地址一般用在静态文件上,比如图片和音视频资源等;返回文件流一般用在动态文件上

    2024年02月09日
    浏览(32)
  • vue 前端自动打开文件地址进行下载

    最近在做异步导出的功能,导出的过程中前端另外启动一个查询导出进度的线程接口。如果导出完成后,把生成的文件上传到服务器,返回给前端一个文件的下载地址; 前端自动打开这个地址进行跳转下载。 有两种方式 这种方式有一个问题,会被浏览器自动拦截弹出的窗口

    2024年02月04日
    浏览(27)
  • 【前端文件下载】直接下载和在浏览器显示下载进度的下载方法

    之前做下载文件遇到了点问题, 就趁此机会总结一下前端下载文件的方法: 如果是浏览器支持的类型, 那么打开的话是一个preview操作, 那么针对浏览器不支持预览的类型, 如果打开的话就会进行下载操作 a. 地址栏直接输入URL b. window.location.href = URL c. window.open(URL) 使用a标签来下载

    2024年02月05日
    浏览(28)
  • js下载url文件 —— 三种方法

    2024年02月14日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包