如何修复从最大 RAM 下载的浏览器 blob?

How to fix browser blob download from maxing RAM?

我正在尝试使用 post 请求下载大文件(3 gig)到我的后端。 post 请求完成以隐藏文件系统以防止网络抓取。似乎某些下载最初已加载到内存中,因为文件最初并未开始下载,但我的 ram 出现峰值,然后 30 秒后它开始下载并略微降低 ram 使用率。这是我正在使用的代码。

fetch("http://localhost:5000/api/send", {
  method: "POST",
  headers: {
  "Content-Type": "application/json"
  },
  body: JSON.stringify({ "root": root, "path": path, "name": name })
})
.then(response => response.blob())
.then(blob => {
  var url = window.URL.createObjectURL(blob)
  var a = document.createElement("a")
  a.href = url
  a.download = name
  document.body.appendChild(a)
  a.click()
  a.remove()
})

有没有办法在没有 ram/performance 命中的情况下实现这个?将文件作为 GET 请求下载并使用 window.location.href = url 之类的东西没有问题,但我不想使用它,并且在 URL 参数中使用“&”等符号指定文件名时遇到困难。

欢迎任何想法!

您的服务器响应一个 blob,因此它被下载到 RAM 中,然后在客户端称为一个对象 url。

你看客户端真正需要的是url。您不必从 blob 中创建它。相反,您可以在服务器端创建散列 url,如 "bit.ly/whatever",用 url 响应,然后客户端代码执行相同的操作。