前端调取接口获取 blob
触发 a 链接
下载 excel
过慢
项目中,因为excel
文件过大
导致后端调取接口时间过长,用户长时间等待后,才触发 a 链接
的下载弹窗
有没有什么方案能先触发弹窗,再在后台运行下载?
大致代码如下
axios({ method, url, responseType: 'blob',}).then(res => { const blob = new Blob([res.data], { type: 'application/vnd.ms-excel;charset=utf-8' }) // 创建一个类文件对象:Blob对象表示一个不可变的、原始数据的类文件对象 const link = document.createElement('a') // 创建一个a标签 link.download = 'xxx' // 设置a标签的下载属性 link.style.display = 'none' // 将a标签设置为隐藏 link.href = URL.createObjectURL(blob) // 把之前处理好的地址赋给a标签的href document.body.appendChild(link) // 将a标签添加到body中 link.click() // 执行a标签的点击方法 URL.revokeObjectURL(link.href) // 下载完成释放URL 对象 document.body.removeChild(link) // 移除a标签})
你可以使用 JavaScript 的 fetch
API 来异步获取数据,然后在数据准备好之后触发下载。这样可以避免用户长时间等待后,才触发 a 链接
的下载弹窗。具体来说,你可以这样做:
fetch
API 发送异步请求。URL.createObjectURL
创建一个 blob URL,然后设置给隐藏的 a
标签的 href
属性。a
标签的点击事件以开始下载。URL.revokeObjectURL
释放 blob URL。示例代码如下:
fetch(url, { responseType: 'blob' }) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.blob(); }) .then(blob => { const url = window.URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = 'filename.xlsx'; // 设置下载的文件名 document.body.appendChild(link); link.click(); window.URL.revokeObjectURL(url); }) .catch(error => console.error('Error:', error)); // 处理网络错误或 HTTP 状态错误
请注意,此代码需要支持 fetch 和 blob 的浏览器环境。另外,你需要确保后端接口返回正确的 HTTP 状态码和 blob 数据。
cmf_get_file_download_url($file, $expires = 3600) 功能 获取文件下载链接 参数 $file: string 文件路径,数据库里保存的相对路径 $expires: int 过期时间,单位 s 返回 string 文件链接
X2.2.0新增 sp_get_file_download_url($file,$expires=3600) 功能: 获取文件下载链接 参数: $file: 数据库保存的文件路径 $expires:文件过期时间(七牛) 返回: 类型string,文件下载链接 使用: $url = sp_get_file_download_url('portal/23232.png');
cmf_get_file_download_url($file, $expires = 3600) 功能 获取文件下载链接 参数 $file: string 文件路径,数据库里保存的相对路径 $expires: int 过期时间,单位 s 返回 string 文件链接
我可以通过这些代码得到一个链接,它可以成功下载一个文件。
axios接口请求下载文件,但是获取不到header信息? 但是接口响应头确实有返回 打印的response的headers中却没有content-disposition
在我实现了一个Android应用程序的解决方案后,发布到web服务器并验证Google Order,然后发布一个下载链接。现在,我正在尝试编写一个应用程序的代码,以读取thankyou.php页面中的链接 该文件是一个“.dat”扩展名,来自某个链接。应用程序应该检索一个新页面中的链接,并让客户下载文件。