Показать видео из хранилища Gridfs в приложении «Реакция» - PullRequest
0 голосов
/ 23 сентября 2018

Я использую multer-gridfs-storage и gridfs-stream для хранения моего видео в бэкэнде (Express / Node).Когда я пытаюсь получить файл для воспроизведения на моем внешнем интерфейсе (React), проигрыватель отказывается распознавать источник.

Я использую Video-React для отображения видео при загрузке.Загрузка прошла успешно, я получаю двоичную строку из бэкэнда, которую я преобразовал в BLOB-объект.

 try{
      fileBlob = new Blob([res.data], {type : res.headers['content-type']});
    }catch(err){
      console.log('Error converting to blob');
      console.log(err);
    }

Это мой проигрыватель Video-React, который визуализируется

 <Player 
      autoPlay
      ref="player"
      >
      <source src={this.state.fileURL} />
      <ControlBar autoHide={false} />
      </Player>

ЗатемЯ попробовал две техники

  1. readDataAsURL

    let reader = new FileReader(); reader.onload = function(event){ //rThis is just a reference to the parent function this rThis.setState({fileURL: reader.result}, () => { rThis.refs.player.load(); }); } try{ reader.readAsDataURL(fileBlob); }catch(err){ console.log('Error trying readDataURL'); console.log(err); }

src устанавливается правильно, но видеоникогда не загружается

URL.createObjectURL

let vidURL = URL.createObjectURL(fileBlob); rThis.setState({fileURL: vidURL}, () => { rThis.refs.player.load(); });

src имеет значение blob: url, но все равно ничего

Это проблема с Видео-реакцией или я должен делать что-то еще?Любые указатели на ссылки, на которые я мог взглянуть, также помогут.Что я делаю неправильно?dataURL работает в случае изображений, я проверил, но не видео.

1 Ответ

0 голосов
/ 25 сентября 2018

Итак, после некоторого прочтения, я наконец-то понял проблему.Поскольку я использую gridfs-stream, на самом деле я передаю ответ от сервера.Таким образом, я никогда не получал весь файл, и попытка конвертировать res.data, который является просто порцией, была ошибкой.Вместо этого в моем res объекте я нашел исходный URL-адрес в свойстве config.

res.config.url

Он содержал мой исходный URL-адрес, на который мой сервер направлял куски.Должен был понять это раньше, учитывая, что я выбрал хранилище GridFS именно по этой причине.

...