增加Chrome中获取API的最大主体大小

ig9co6j1  于 2023-09-28  发布在  Go
关注(0)|答案(2)|浏览(99)

我试图使用Fetch API上传大文件,当我在Chrome中发布大于128MB的数据时,我遇到了一个问题,在Firefox中超过256MB。我的问题是,有没有办法通过Chrome或firefox的配置来增加这个最大值?我只是做错了吗?是否有更好的方法来异步发布大型数据?
这里有一个简短的例子来说明这个问题:https://jsfiddle.net/hspw4bzo

function performFetch() {
    const megabytes = document.getElementById( 'megabytes' ).value * 1;
    const largeString = (new Array(megabytes * 1024 * 1024 )).join("x");

    const options = {
      redirect: 'follow',
      method: 'POST',
      body: largeString
    };

    fetch( 'https://jsfiddle.net/', options ).then( () => {
      console.log( 'success' )
    } )
  }

当你点击“Go”按钮时,它将启动一个大小为128MB的POST请求。在Chrome中,这会导致框架崩溃。

pu3pd22g

pu3pd22g1#

我发现,当发布大量数据时,使用Blob可以减轻firefox抛出的内存不足错误和Chrome中的崩溃。在查看了其他答案herehere之后,我到达了Blob用法

function performFetch() {
    const megabytes = document.getElementById( 'megabytes' ).value * 1;
    const largeString = (new Array(megabytes * 1024 * 1024 )).join("x");

    const options = {
      redirect: 'follow',
      method: 'POST',
      body: new Blob( [ largeString ], { type: 'text/plain' } )
    };

    fetch( 'http://example.com', options ).then( () => {
      console.log( 'success' )
    } )
  }
mrwjdhj3

mrwjdhj32#

不应将文件作为字符串上传;这也适用于旧的好XMLHttpRequest。你可能会遇到服务器或浏览器的限制(你目前面临的限制)。
使用Blob的多部分上传,例如:例如:here

const formData = new FormData()
formData.append('blob', new Blob(['Hello World!\n']), 'test')

fetch('http://localhost:5001/api/v0/add', {
  method: 'POST',
  body: formData
})
.then(r => r.json())
.then(data => {
  console.log(data)
})

相关问题