Загрузить и сохранить большой файл на сервер nodejs - PullRequest
0 голосов
/ 20 марта 2020

Я хочу разрешить клиенту загружать большой видеофайл и сохранять файл на сервере.
У меня есть файл ввода <input type="file" name="videoFile" id="videoFile" /> на стороне клиента.
После того, как клиент выбрал свой файл (видео), я анализирую его в Blob следующим образом:

function fileToBlob(file) {
  return new Promise((resolve, reject) => {
    const mime = file.type;
    const reader = new FileReader();
    reader.readAsArrayBuffer(file);
    reader.onload = evn => resolve(new Blob([evn.target.result], { type: file.type }));
    reader.onerror = error => reject(error);
  });
}

Затем я отправил его на сервер, используя socket.io.
Остальной код клиента:

fileToBlob($("#videoFile")[0].files[0]).then(function(blob) {
  socket.emit(
    "upload-video",
    $("#courseName").val(),
    $("#videoName").val(),
    blob
  );
});

На сервере я перехватил событие "upload-video":

socket.on("upload-video", function(courseName, videoName, blob) {
  fs.writeFileSync(
    `public/courses/${courseName}/${videoName}.mp4`,
    Buffer.from(new Uint8Array(blob))
  );
});

Теперь он отлично работает для небольших видеофайлов , но в тот момент, когда я попробовал видеофайл 450 МБ, ничего не произошло.
Кто-нибудь может знать, почему и как это исправить? Спасибо!

ОБНОВЛЕНИЕ: После небольшого тестирования я думаю, что socket.io не может emit большие данные.
Это правда? И если да, то как это исправить?

...