如何纯前端实现文件下载

本文介绍了如何在Vue项目中,不依赖后端,通过将文件放在public文件夹并使用a标签的download属性实现文件下载。同时讨论了跨域下载时遇到的浏览器兼容问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务场景

有一个下载文件的功能,不引入后端资源,纯前端应该如何实现?
在这里插入图片描述

解决方案

在vue2或者vue3项目中,可以把文件放在 public 文件夹下,然后使用a标签进行文件下载。
如:我要下载的文件是模版.xlsx 。首先,我把这个文件直接放到了 public 文件夹里。然后,添加下面的代码,即可实现点击“下载模版”就下载文件的功能。

<template>
  <a
    href="/模版.xlsx"
    download
    >
    下载模板
  </a>
</template>

为什么 href 这样写就能获取到文件?

在 Vue CLI 项目中,public 文件夹中的文件可以直接通过相对路径进行访问。所以当你使用 /模板.xlsx 这样的路径时,Vue 会将其解析为项目根目录下的 public 文件夹中的 模板.xlsx 文件。
这是因为 Vue CLI 在构建项目时,会将 public 文件夹中的内容复制到最终的构建目录中(默认是 dist 文件夹)。因此,public 文件夹中的文件可以直接通过相对路径访问,而不需要经过额外的处理。

如果我把文件上传到别的服务器再下载行不行?

可以。但是可能会出现以下2个问题:

  1. 在chrome浏览器,出现了文件被重命名的问题。
  2. 在Edge 浏览器仲,会无视 download 属性自动打开 office 而不是下载文件。
    如果要解决这些问题,你可能需要在响应头增加Content-Disposition: Attachment来处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值