Я работаю над функциональностью потоковой передачи большого файла из браузера через веб-сокет кусками по 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>