下载超过 10mb React + Spring boot 的文件时出现“无法获取”错误

问题描述 投票:0回答:1

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)
  });

已经尝试过一些替代方案:

  • 使用axios(抛出
    Network Error
    );
  • 使用库作为文件保存程序;
  • 设置超时时间为9999999;

所有人都实现相同的行为。

我也读到 createObjectURL 使用内存来执行下载,但文件的最大大小经验证为 25MB。

网络选项卡的一些打印:

请求标头:

请求回复:

网络列表:

我可以在这里做什么?

reactjs https download blob multipartform-data
1个回答
0
投票

请检查并增加React中的超时时间,我也遇到了同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.