2017-01-26 3 views
1

Я пытаюсь без успеха использовать readAsDataURL-функцию плагина Cordova File, чтобы получить версию видеофайла base64. Мой код выглядит следующим образом:Cordova File plugin readAsDataURL не возвращает данные файла

recordVideo() 
 
    { 
 
    return new Promise(resolve => 
 
    { 
 
     let options: CaptureVideoOptions = { limit: 1, duration: 2 }; 
 
     MediaCapture.captureVideo(options) 
 
     .then(
 
      (data: MediaFile[]) => { 
 

 
      console.log('Media: recordVideo: cordova.file.dataDirectory = ' + cordova.file.dataDirectory + ', path = ' + data[0].fullPath.substring(1)); 
 

 
      // Turn the video file into base64 
 
      let base64File = File.readAsDataURL(cordova.file.dataDirectory, data[0].fullPath.substring(1)); 
 

 
      console.log('Media: recordVideo: got video with data = ' + JSON.stringify(data)); 
 

 
      console.log('Media: recordVideo: base64File = ' + JSON.stringify(base64File)); 
 

 
      resolve(data); 
 
      }, 
 
      (err: CaptureError) => console.error('ERROR - Media: recordVideo: captureVideo error = ' + err) 
 
     ); 
 
    }); 
 
    }

Выход из первого console.log показывает значения параметров, передаваемых readAsDataURL:

Media: recordVideo: cordova.file.dataDirectory = file:///var/mobile/Containers/Data/Application/764345DC-A77D-43C2-9DF7-CDBE6A0DC372/Library/NoCloud/, path = private/var/mobile/Containers/Data/Application/764345DC-A77D-43C2-9DF7-CDBE6A0DC372/tmp/50713961066__4FD8AF8D-BD36-43A4-99CC-F328ADFD7E38.MOV 

Второй console.log показывает данные, возвращаемые плагином MediaCapture:

Media: recordVideo: got video with data = [{"name":"50713961066__4FD8AF8D-BD36-43A4-99CC-F328ADFD7E38.MOV","localURL":"cdvfile://localhost/temporary/50713961066__4FD8AF8D-BD36-43A4-99CC-F328ADFD7E38.MOV","type":"video/quicktime","lastModified":null,"lastModifiedDate":1485446813000,"size":195589,"start":0,"end":0,"fullPath":"/private/var/mobile/Containers/Data/Application/764345DC-A77D-43C2-9DF7-CDBE6A0DC372/tmp/50713961066__4FD8AF8D-BD36-43A4-99CC-F328ADFD7E38.MOV"}] 

Последние console.log показывает значение, возвращаемое readAsDataURL:

Media: recordVideo: base64File = {"__zone_symbol__state":null,"__zone_symbol__value":[]} 

Существует рядом нет документации по использованию этого (что я могу найти).

+0

На самом деле ionic2 родной, File.readAsDataURL возвращает обещание. Вы пытались File.readAsDataURL (cordova.file.dataDirectory, data [0] .fullPath.substring (1)). Then ((result) => {console.log (result);} – AishApp

+0

Спасибо за то, что я теперь могу видеть почему он не работает, так как я уловил ошибки.Если я попытаюсь использовать fullPath, возвращенный captureVideo, я получаю ошибку «не может иметь ведущую /». Если я удалю косую черту из fullPath, я получу ошибку NOT_FOUND ». Я передаю localURL. Я получаю сообщение об ошибке «ENCODING_ERR». Любые идеи о том, как я могу заставить это работать? –

+0

Вы проверили, правильно ли указан путь к файлу? Проверьте http://stackoverflow.com/questions/35388817/cordovafile-removefile-checkdir-error-5-encoding-err также .. Это может помочь вам – AishApp

ответ

1

Функция readAsDataURL получает путь и имя файла как параметры и возвращает обещание. Использование является

File.readAsDataURL("path_to_the_FileName", "Filename").then(result => { 
    this.base64File = result; 
}); 

В соответствии с лог консоли, имя файла и полный путь к имени файла получаются из данных (обещание вернулся из MediaCapture.captureVideo).

Таким образом, вы можете использовать его, как показано ниже

var path = "file://"+data[0].fullPath.substring(7,data[0].fullPath.lastIndexOf("/"))‌​; 
File.readAsDataURL(path, data[0].name).then(result => { 
    this.base64File = result; 
} 
+0

Вам нужно изменить str.lastIndexOf на данные [0] .fullPath.lastIndexOf. –

+0

yep .. Забыл изменить его. Изменено сейчас :) – AishApp

Смежные вопросы