使用离子3本机相机插件选择视频

时间:2018-03-12 17:28:22

标签: ionic-framework ionic3 ionic-native

this.camera.getPicture({
      quality: 50,
      destinationType: this.camera.DestinationType.DATA_URL,
      mediaType: this.camera.MediaType.VIDEO,
      sourceType: this.camera.PictureSourceType.PHOTOLIBRARY,
    }).then((videoData) => {

    console.log('video data', videoData);

我无法将视频数据发送到服务器。

我在这里遇到的第一件事就是destinationType如何影响返回的结果,因为无论我设置什么(DATA_URL或File_Uri),它总是返回一些这个结构的网址/storage/emulated/0/DCIM/Camera/VID_20180312_210545.mp4 。 (仅供参考:我目前正在Android平台上测试这个)。我可以通过简单地将视频放入视频src来预览视频,但我无法将此视频发送到服务器。

这是我用来从返回的/storage网址获取视频文件,然后将视频发送到服务器的方法。

return this.file.resolveLocalFilesystemUrl(data).then((entry:FileEntry)=>{
      debugger;
      return new Promise((resolve, reject)=>{
        entry.file((file)=>{
          let fileReader = new FileReader();
          fileReader.onloadend = ()=>{
            let blob = new Blob([fileReader.result], {type:file.type});
            resolve({blob: blob, file: file});
          };
          fileReader.readAsArrayBuffer(file);
        })
      })
    })

传递给resolveLocalFilesystemUrl的数据参数是我之前提到的那个url(/ storage / 0 ..)。

但这会引发错误,错误代码为5&错误消息ENCODING_ERR

我没有故意传递编码类型,因为这是图像文件。

重要提示:如果我添加' file://'对于数据,然后将其传递给resolveLocalFilesystemUrl(),就像这样this.file.resolveLocalFilesystemUrl('file://'+data).then(()),然后我就能创建我已发送到服务器的文件条目,服务器已成功保存视频。但我想使用更多的跨平台方法,这种方法可以在Android和Android上使用。的iOS

1 个答案:

答案 0 :(得分:0)

使用Android,您需要更正您的网址。

从库中选择视频时,应使用resolveNativePath。

您可以在此处找到更多文档:

https://ionicframework.com/docs/native/file-path/