Разобрать файл на чанки и собрать обратно в js

Я использую высокоуровневое API для разделение файла на чанки. File.slice(start, end) После чего добавляю эти части в масив и после пытаюсь собрать обратно в файл и получить url для воспроизведения. Итог: Файл ломаеться и не могу воспроизвести его. Код ниже

 const file = ...videoFile
 const chunkSize = 1048576 * 30
 let chunkStart = 0
 let chunkEnd = chunkSize
 let totalCount = 1
 let count = 0
 let blobArray = []

 const nextChunk = () => {
  if(count <= totalCont) {
   const chunk = file.slice(chunkStart, chunkEnd, file.type)
   blobArray = [...blobArray, chunk]
   count++
   chunkStart = chunkEnd
   chunkEnd = chunkEnd + chunkSize >= file.size ? file.size : chunkEnd + chunkSize
   nextChunk()
  } else {
   const newFile = new File(blobArray, 'video.mp4')
   const r = new FileReader()
   r.onload = (event) => {
     console.log(event.target.result)
   }
   r.readAsDataURL(newFile)
  }
 }

Возможно проблема в том что строка начинаеться с data:application/octet-stream если я правильно помню то это значит что это часть файла. Если подскажите как исправить, буду благодарен. Ожидаемый результат. Способ разделять файл разделять на части а потом соберать его обратно без потери целосности что бы в последствии можно было бы передавать эти части на бек.


Ответы (1 шт):

Автор решения: Влад Лесной

Если кому интересно, конкретную проблему с тем что невозможно вернуть файл в изначальное состояние на фронте я решил таким образом.

const chunks = [Blob созданые через slice]
const src = URL.createObjectURL(new File(chunks, 'video.mp4'))

Но проблема передачи этих самых блобов на сервер осталась. Если у вас есть идеи прошу в другой топик Blob полученый при slice файла на добавляется в FormData

→ Ссылка