网站首页 > 技术文章 正文
最近项目使用到前端下载远程文件的功能,使用到a标签来下载,这里将前端项目使用a标签下载远程文件的过程做个总结:
例如后端给的远程文件地址为:http://127.0.0.1:8088/file-upload/20230829/31b697f8-3729-418d-859c-ac8ae4d03c20.txt
在下载事件中使用a标签直接操作代码如下:
const link = document.createElement('a')
link.style.display = 'none'
link.href = item.fileAddr // 文件地址
link.download = item.fileName // 文件名称
link.click()
return false
这种写法针对不同文件类型有不同展现形式,对于浏览器默认支持预览的类型(比如txt文本和png图片)等格式会直接在浏览器中预览展示而不是直接下载,针对不支持的类型(比如docx文档和xlsx表格)等格式会直接执行下载操作,我们可以通过修改href属性的请求媒体类型来解决这个问题,只需将文件地址改成如下格式即可:
const link = document.createElement('a')
link.style.display = 'none'
link.href = item.fileAddr + '?response-content-type=application/octet-stream' // 文件地址
link.download = item.fileName // 文件名称
link.click()
return false
如上就解决了部分类型是预览而不是直接下载的问题。
注意:这种地址格式可能会遇到download属性设置无效,如上边地址下载文件后文件名为31b697f8-3729-418d-859c-ac8ae4d03c20.txt的情况,这时这种下载方式就不适用了,可以通过先去请求这个地址然后转成blob类型来重新下载,具体实现方式如下:
const request = new window.XMLHttpRequest()
request.open('GET', item.fileAddr, true) // 文件地址
request.responseType = 'blob'
request.onload = () => {
const url = window.URL.createObjectURL(request.response)
const link = document.createElement('a')
link.href = url
link.download = item.fileName // 文件名称
link.click()
}
request.send()
猜你喜欢
- 2025-05-22 36个工作中常用的JavaScript函数片段「值得收藏」
- 2025-05-22 JAVA实现HTTP的上传与下载
- 2025-05-22 java+上传整个文件夹的所有文件
- 2025-05-22 SPRINGBOOT 实现大文件上传下载、分片、断点续传教程
- 2025-05-22 IDM下载器:站点抓取相关设置介绍
- 2025-05-22 Pug 3.0.0正式发布,不再支持 Node.js 6/8
- 2025-05-22 还有前端不知道Electron的?手把手教你把Vue项目打包成桌面程序
- 2025-05-22 SpringBoot系列——附件管理:整合业务表单实现上传、回显、下载
- 2025-05-22 浏览器大文件(百M以上)的上传下载实现技术
- 2025-05-22 6个免费又让人直呼强大的软件
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)