如何在前端下载后端返回的文件流时,获取请求头中的文件名称?

简介: 如何在前端下载后端返回的文件流时,获取请求头中的文件名称?

1. 前言

在前后端分离的开发模式下,前端需要从后端获取文件流,以便进行文件下载。同时,前端还需要获取请求头中的文件名称,以便为用户提供更加友好的下载体验。本文将介绍如何在前端下载后端返回的文件流时,获取请求头中的文件名称。

2. 获取文件流

前端可以通过发送请求的方式获取后端返回的文件流。通常情况下,后端会先将文件流传输到前端,然后前端再将文件流转换为文件进行下载。

下面是一个示例代码:

axios({
   
  method: 'get',
  url: '/download',
  responseType: 'blob'
}).then((response) => {
   
  const url = window.URL.createObjectURL(new Blob([response.data]));
  const link = document.createElement('a');
  link.href = url;
  link.setAttribute('download', 'file.pdf');
  document.body.appendChild(link);
  link.click();
})

在上述代码中,axios 是一个常用的 HTTP 请求库。responseType 参数设置为 blob,表示响应数据是二进制流。响应数据包含在 response.data 中,前端可以利用浏览器提供的 Blob 接口将文件流转换为下载链接。

3. 获取请求头中的文件名称

后端返回文件流时,通常会在响应头中设置 Content-Disposition 实体头字段,用于指定文件名称、类型等信息。其中,Content-Disposition 实体头字段中的 filename 子参数用于指定文件名称。

在前端下载文件时,可以通过获取响应头中的 Content-Disposition 实体头字段,进而获取文件名称。下面是一个示例代码:

axios({
   
  method: 'get',
  url: '/download',
  responseType: 'blob'
}).then((response) => {
   
  const disposition = response.headers['content-disposition'];
  const matchArray = disposition.match(/filename="(.*)"/);
  const filename = matchArray[1];
  const url = window.URL.createObjectURL(new Blob([response.data]));
  const link = document.createElement('a');
  link.href = url;
  link.setAttribute('download', filename);
  document.body.appendChild(link);
  link.click();
})

在上述代码中,response.headers['content-disposition'] 获取了响应头中的 Content-Disposition 实体头字段。利用正则表达式匹配出 filename 子参数的值,即可获取文件名称。最后,在创建 <a> 标签时,将 download 属性设置为文件名称。

4. 总结

本文介绍了如何在前端下载后端返回的文件流时,获取请求头中的文件名称。通过获取响应头中的 Content-Disposition 实体头字段,再利用正则表达式匹配出 filename 子参数的值,即可轻松获取文件名称。

目录
相关文章
|
4月前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
170 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
2月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
8月前
|
前端开发
前端引入字体文件
文章介绍了如何在前端项目中引入字体文件,并展示了具体的HTML和CSS代码示例,包括如何使用`@font-face`规则来定义字体和在页面中应用自定义字体。
266 1
前端引入字体文件
|
3月前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
85 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
8月前
|
缓存 前端开发
后端MultipartFile接收文件转Base64
后端MultipartFile接收文件转Base64
174 8
|
6月前
|
缓存 前端开发
后端MultipartFile接收文件转Base64
后端MultipartFile接收文件转Base64
149 5
|
6月前
|
前端开发 API
前端界面生成PDF并导出下载
【10月更文挑战第21天】利用合适的第三方库,你可以在前端轻松实现界面生成 PDF 并导出下载的功能,为用户提供更方便的文档分享和保存方式。你还可以根据具体的需求进一步优化和定制生成的 PDF 文件,以满足不同的业务场景要求。
|
7月前
|
前端开发 JavaScript
💥【exceljs】纯前端如何实现Excel导出下载和上传解析?
本文介绍了用于处理Excel文件的库——ExcelJS,相较于SheetJS,ExcelJS支持更高级的样式自定义且易于使用。表格对比显示,ExcelJS在样式设置、内存效率及流式操作方面更具优势。主要适用于Node.js环境,也支持浏览器端使用。文中详细展示了如何利用ExcelJS实现前端的Excel导出下载和上传解析功能,并提供了示例代码。此外,还提供了在线调试的仓库链接和运行命令,方便读者实践。
770 5
|
7月前
|
JavaScript 前端开发 编译器
吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
【10月更文挑战第2天】吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
145 2
|
7月前
|
存储 前端开发 Java
Java后端如何进行文件上传和下载 —— 本地版(文末配绝对能用的源码,超详细,超好用,一看就懂,博主在线解答) 文件如何预览和下载?(超简单教程)
本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。
2432 2