Почему этот фрагмент потокового файла работает в Firefox, а не в Chrome? - PullRequest
0 голосов
/ 07 декабря 2018

Я работаю над функциональностью потоковой передачи большого файла из браузера через веб-сокет кусками по 1 МБ.Приведенный ниже код отлично работает в Firefox (версия 63), но замедляет сканирование в Chrome (версия 68) и, по-видимому, останавливает браузер.Он загружает файл красиво и гладко, если я закомментирую ws.send(data).Любые идеи?

РЕДАКТИРОВАТЬ: см. Мой связанный вопрос здесь , который, я считаю, сужает проблему.

простой сервер веб-сокета для получения данных:

const WebSocket = require('ws')

const wsServer = new WebSocket.Server({ port: 9001 })

код браузера:

<!doctype html>
<html>
  <head>
  </head>

  <body>
    <input id='file_button' type='file'></input>
    <script>
      const ws = new WebSocket('ws://localhost:9001')

      ws.onopen = () => {
        const uploadButton = document.getElementById('file_button')
        uploadButton.addEventListener('change', (e) => {
          const file = e.target.files[0]

          const chunkSize = 1024*1024

          let offset = 0

          readChunk()

          function readChunk() {

            const reader = new FileReader()

            const slice = file.slice(offset, offset + chunkSize)

            reader.onload = (event) => {

              const data = event.target.result
              console.log("chunk")
              ws.send(data)

              offset += chunkSize

              if (offset < file.size) {
                readChunk()
              }
            }

            reader.readAsArrayBuffer(slice)
          }
        })
      }
    </script>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...