Как исправить загрузку блоба браузера с максимальной оперативной памяти? - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь загрузить большие файлы (3 гигабайта) с помощью почтового запроса в свой бэкэнд. Почтовый запрос сделан, чтобы скрыть файловую систему от веб-очистки. Похоже, что часть загрузки первоначально загружается в память, потому что файл изначально не начинает загрузку, но у меня набегает скорость памяти, затем через 30 секунд начинается загрузка и немного снижается использование памяти. Вот код, который я использую.

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

Есть ли способ реализовать это без снижения производительности или производительности? Загрузка файла в виде запроса GET и использование чего-то вроде window.location.href = url не вызывает проблем, но я бы предпочел не использовать это, и у меня возникают трудности при указании имен файлов с символами, такими как "&" в параметре URL.

Любые идеи приветствуются!

1 Ответ

1 голос
/ 03 мая 2020

Ваш сервер отвечает BLOB-объектом, поэтому он загружается в ОЗУ, а затем на стороне клиента называется URL-адресом объекта.

Вы видите, что клиенту действительно нужен URL-адрес. Вам не нужно создавать его из BLOB-объектов. Вместо этого вы можете создать хешированный URL-адрес на стороне сервера, например, «bit.ly/whwhat», ответить этим URL-адресом, а затем выполнить код клиента таким же образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...