后台返回文件URL,前端下载文件,即使设置文件名,下载的文件名称并不是自己所设置的问题
1.背景
项目中遇到这么一个问题,上传文件后,后台返回的是一个URL,前端需要通过点击下载这个文件
2.首次处理
当时一看是下载文件,觉得很简单,无非是通过创建a标签来实现,以下是我当时的代码,用的是antd mobile
点击查看代码
/ *
// 后台返回的文件信息
{
"filename": "test.pdf",
"size": 23888,
"path": "676cff7ae4b09f5f098d6695.pdf",
"url": "https://oss-sz-silas-1321516265.cos.ap-guangzhou.myqcloud.com/oss-sz-silas-dev/676cff7ae4b09f5f098d6695.pdf",
"ext": "pdf"
}
*/
// 前端下载文件逻辑
const handleDownloadPdf = (pdfUrl:string,filename:string)=> {
if(pdfUrl){
console.log(pdfUrl,filename)
const link = document.createElement('a');
link.href = pdfUrl;
link.download = filename;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}else{
Toast.show({
content: "pdf路径不存在!",
icon: 'fail',
duration: 1000,
})
}
}
上面代码下载文件没问题,但是文件名称,始终是URL的最后一部分

3.emmm以前对后台返回的二进制流数据,进行文件下载,可以随意设置文件名。哦~,二进制流
于是我把URL通过fetch进一步转化为Blob
点击查看代码
const handleDownloadPdf = (pdfUrl:string,filename:string)=> {
if(pdfUrl){
fetch(pdfUrl)
.then(response => response.blob()) // response.blob() 方法来获取响应的 Blob 对象,这通常用于处理二进制数据,如文件
.then(blob => { // 获取Blob 对象
console.log(blob)
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = filename; // 使用filename
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url); // 释放之前创建的 Blob URL,这里可以不用再移除a了
})
}else{
Toast.show({
content: "pdf路径不存在!",
icon: 'fail',
duration: 1000,
})
}
}
4.结果
这次便达到了动态设置文件名的目的,
总结:直接使用URL进行文件下载,文件名将是URL最后那部分内容,而Blob对象允许我们读取和设置文件名(不受URL影响)

后台返回文件URL,前端下载文件,即使设置文件名,下载的文件名称并不是自己所设置的问题的更多相关文章
- ionic后台返回的数据是html模板的时候,解析html文件的方法:
1.后台返回来的数据格式是: { "state":"100", "data":[ {"Content": "\ ...
- html不识别<br/>,后台返回<br/>,前端不换行解决办法
今天编写页面,后台直接返回带有html格式的字符串,包含<br/>,前端以为要展示<br/>,将其解析为<br/>页面不换行 解决办法 后台将<br/> ...
- django 文件上传(阿里云oss)下载(支持大文件下载)
1.文件上传 Models 设计 class Upload_File(models.Model): image = models.FileField(upload_to='file/%Y/%m',de ...
- application/x-www-form-urlencoded multipart/form-data text/plain 后台返回的数据响应的格式类型
application/x-www-form-urlencoded multipart/form-data text/plain 为什么上传文件的表单里要加个属性 enctype 后台返回的数据响应 ...
- phpexcel 导出excel无法打开,提示文件格式或文件名无效,文件损毁,解决办法
使用过很多次phpexcel了,有时需要保存文件到磁盘,有时需要浏览器弹出下载.保存到磁盘一半不会出现问题,关键是浏览器弹出保存,经常会发生导出的excel文件无法打开,提示文件格式或文件名无效,文件 ...
- 【linux】【FastDFS】FastDFS上传返回的url直接下载和下载文件的文件名问题
FastDFS安装及其他问题参考:https://www.cnblogs.com/jxd283465/p/11556263.html直接调用FastDFS返回的url,浏览器访问后默认打开方式./us ...
- 通过阿里OSS文件服务返回的URL获取文件流下载
我们都知道将文件上传到阿里的OSS文件服务上后,可以通过generatePresignedUrl(bucketName, key, expiration)方法获取该文件的防问路径,但是当我们知道该文件 ...
- js下载后台返回的docx(返回格式:文档流)文件
原文地址: https://www.jianshu.com/p/a81c68c15fbd PS需要指定responseType类型,不然文件内容会乱码哦 咦?文件名乱码?需要手动设置文件名哦↓ 呀,文 ...
- java后台生成文件给前端下载(response输出流)
1.设置 ContentType response.setContentType("application/x-download"); 2.设置文件名,并指定编码格式 fileNa ...
- ASP.NET CORE使用WebUploader对大文件分片上传,并通过ASP.NET CORE SignalR实时反馈后台处理进度给前端展示
本次,我们来实现一个单个大文件上传,并且把后台对上传文件的处理进度通过ASP.NET CORE SignalR反馈给前端展示,比如上传一个大的zip压缩包文件,后台进行解压缩,并且对压缩包中的文件进行 ...
随机推荐
- Timestamp和LocalDateTime 互转
jdk:1.81.Timestamp 转 LocalDateTime Timestamp time = Timestamp.from(Instant.now());LocalDateTime loca ...
- PostgreSQL 初始化配置设置
title: PostgreSQL 初始化配置设置 date: 2024/12/27 updated: 2024/12/27 author: cmdragon excerpt: PostgreSQL是 ...
- Qt编写的项目作品13-机房安全作业预警系统
一.功能特点 显示维修间所有图像: 门外1号红外,门内2号红外: 1号先报警,紧接2号报警,人员进入计时: 图标显示:人员图标和报警等级图标,人员进入了,人员图标闪烁,等级图标对应不同时间: 功能要求 ...
- StarRocks元数据无法合并
一.先说结论 如果您的StarRocks版本在3.1.4及以下,并且使用了metadata_journal_skip_bad_journal_ids来跳过某个异常的journal,结果之后就出现了FE ...
- [转]fatal: remote error: The unauthenticated git protocol on port 9418 is no longer support问题解决
背景 因为居家办公,把代码从远程clone下来之后,发现使用npm install一直失败. 提示的错误:fatal: remote error: The unauthenticated git pr ...
- 【问题解决记录】vue解决低版本安卓与ios10以下系统兼容性问题
问题描述: 项目中的企业微信内部应用,使用Vue-cli搭建的H5页面web,在低版本的安卓手机或ios8.0.9.0中出现接口数据访问失败,HTTP状态码返回0的问题,无法正常使用系统.安卓手机主要 ...
- Hugo|30分钟搭建完整的个人博客
本文将讲述如何使用 Hugo,从0到1完成一个"静态博客"的搭建.展示 hugo 可以通过简单配置,自定义装饰博客界面的能力,并集成网站数据统计能力. 下一篇文章将教会你将站点免费 ...
- biancheng-JSTL标签库
JSP 标签是一组与 HTML 标签相似,但又比 HTML 标签强大的功能标签.JSTL 用来简化 JSP 开发,可以使我们不用嵌入 Java 代码就能够开发出复杂的 JSP 页面.JSTL 包含 5 ...
- React、Angular、Vue.js三者比较指南
Vue-React-Angular三者区别 1. 基本概念Angular 是一个应用设计框架与开发平台,用于创建高效.复杂.精致的单页面应用. React 是一个用于构建用户界面的 JavaScr ...
- MySQL---索引、Explain、优化、慢查询
索引 什么是索引? 索引是帮助Mysql提高获取数据的数据结构,换一句话讲就是"排好序的快速查找的数据结构". 一.索引的分类 MySQL主要的几种索引类型:1.普通索引.2.唯 ...