返回
轻松搞定文件下载:后端url直达本地,自定义文件名,一气呵成!
前端
2023-01-07 16:53:46
在前端开发过程中,从后端获取文件并将其下载到本地是一个常见的需求。开发者经常会遇到如何处理文件下载 URL 和设置文件下载名称的问题。本文将详细介绍如何通过前端代码实现从后端 URL 下载文件并自定义文件下载名称的功能。
步骤 1:获取后端返回的 URL
首先,我们需要获取后端返回的文件 URL。假设后端返回的文件 URL 保存在变量 fileUrl
中:
const fileUrl = 'https://example.com/file.pdf';
步骤 2:创建用于下载的 a 标签
接下来,我们创建一个 a
标签,并将 href
属性设置为 fileUrl
:
const downloadLink = document.createElement('a');
downloadLink.href = fileUrl;
步骤 3:设置文件下载名称
然后,我们设置 a
标签的 download
属性,指定下载后的文件名:
downloadLink.download = 'custom-file-name.pdf';
步骤 4:模拟点击 a 标签,触发文件下载
最后,我们使用 click()
方法模拟点击 a
标签,触发文件下载:
downloadLink.click();
步骤 5:释放内存
为了防止内存泄漏,我们可以释放 fileUrl
对象:
URL.revokeObjectURL(fileUrl);
通过这些步骤,您可以轻松实现从后端 URL 下载文件并自定义文件下载名称的功能。
扩展阅读:下载状态跟踪和进度条
为了让下载过程更加友好,您可以添加下载状态跟踪和进度条功能。这里提供两种方法:
1. 使用 XMLHttpRequest(XHR)
const xhr = new XMLHttpRequest();
xhr.open('GET', fileUrl, true);
xhr.responseType = 'blob';
xhr.onload = function() {
if (xhr.status === 200) {
// 文件下载成功
const blob = xhr.response;
const url = URL.createObjectURL(blob);
const downloadLink = document.createElement('a');
downloadLink.href = url;
downloadLink.download = 'custom-file-name.pdf';
downloadLink.click();
// 释放内存
URL.revokeObjectURL(url);
} else {
// 文件下载失败
console.error('文件下载失败:', xhr.status);
}
};
xhr.onprogress = function(e) {
// 更新进度条
const progress = e.loaded / e.total * 100;
console.log('下载进度:', progress, '%');
};
xhr.send();
2. 使用 fetch API
fetch(fileUrl)
.then(response => {
if (response.ok) {
// 文件下载成功
return response.blob();
} else {
// 文件下载失败
throw new Error('文件下载失败:', response.status);
}
})
.then(blob => {
const url = URL.createObjectURL(blob);
const downloadLink = document.createElement('a');
downloadLink.href = url;
downloadLink.download = 'custom-file-name.pdf';
downloadLink.click();
// 释放内存
URL.revokeObjectURL(url);
})
.catch(error => {
// 文件下载失败
console.error('文件下载失败:', error);
});
结语
本文旨在帮助您轻松实现文件下载功能并自定义文件下载名称。如果您还有其他问题,欢迎在评论区留言讨论。