React 中有一个客户端服务器,需要从后端服务器(kotlin + spring boot)请求文件来下载它们。
使用 Swagger、Postman 和 Insomnia 中的请求端点,我可以成功下载任何大小的任何文件。
在我的客户端服务器中,有一个可以通过单击图标触发下载的文件列表。我可以下载小于 10mb 的文件,不会出现错误,但是当文件大于 10mb 时,它会失败并出现
Failed to fetch
错误。
实际上,这是一种奇怪的行为。假设我有一个名为
FILE A
的文件,其大小小于 10MB,而 FILE B
则为 25MB(允许上传的最大大小)。在页面的第一个条目中,如果我第一次请求下载文件 B,它会抛出 Failed to fetch
。现在,如果第一个请求在 FILE A 中并且在 FILE B 之后,则 FILE B 下载成功。我真的很困惑这里发生了什么。
代码:
const options = {
method: 'GET',
headers: { "Authorization": `Bearer ${user?.token}` },
};
fetch(`http://localhost:8080/storage/download?fileName=${filePath}`, options)
.then(function (response) {
return response.blob();
})
.then(function (myBlob) {
setSpinControl(false);
const file = new Blob(
[myBlob],
{ type: 'application/pdf' }
);
const fileURL = URL.createObjectURL(file);
if (window) {
window.open(fileURL, '_blank');
}
})
.catch((err) => {
setSpinControl(false);
console.log(err)
});
已经尝试过一些替代方案:
Network Error
);所有人都实现相同的行为。
我也读到 createObjectURL 使用内存来执行下载,但文件的最大大小经验证为 25MB。
网络选项卡的一些打印:
我可以在这里做什么?
请检查并增加React中的超时时间,我也遇到了同样的问题。