在不使用window.open
的情况下,可以使用fetch
来从REST API下载文件。下面是一个示例代码:
fetch('https://example.com/api/download', {
method: 'GET',
})
.then(response => response.blob())
.then(blob => {
// 创建一个URL对象,用于生成临时下载链接
const url = window.URL.createObjectURL(blob);
// 创建一个隐藏的元素,用于触发下载
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = 'file.pdf'; // 设置下载文件的名称
document.body.appendChild(a);
a.click();
// 清理URL对象和元素
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
})
.catch(error => {
console.error('下载文件时发生错误:', error);
});
上面的代码使用fetch
发送GET请求来获取文件的响应。然后,使用response.blob()
将响应数据转换为Blob
对象。接下来,将Blob
对象转换为临时的下载链接,然后创建一个隐藏的元素,并设置其
href
属性为临时下载链接。最后,通过调用a.click()
来触发下载,同时也可以设置下载文件的名称。下载完成后,清理临时下载链接和元素。
请注意,上述示例中的URL(https://example.com/api/download)是一个示例API的URL,请将其替换为实际的API URL。另外,这段代码在现代浏览器中有效,但在某些旧版浏览器中可能不起作用。