Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ionic framework 使用ionic 3本机摄像头插件选择视频_Ionic Framework_Ionic3_Ionic Native - Fatal编程技术网

Ionic framework 使用ionic 3本机摄像头插件选择视频

Ionic framework 使用ionic 3本机摄像头插件选择视频,ionic-framework,ionic3,ionic-native,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

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

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如何影响返回的结果,因为无论我设置什么(数据URL或文件Uri),它都会返回这种结构的URL
/storage/emulated/0/DCIM/Camera/VID\u 20180312\u 210545.mp4
。(仅供参考:我目前正在android平台上进行测试)。我可以通过简单地将视频放入视频src预览视频,但我无法将此视频发送到服务器

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

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);
其中,传递给resolveLocalFilesystemUrl的数据参数与我前面提到的url(/storage/0..)相同

但这会抛出错误代码为5的错误&错误消息编码错误

我不是故意在这里传递编码类型,因为这是用于图像文件的


重要提示:如果我在数据中添加'file://',然后将其传递给
resolveLocalFilesystemUrl()
,就像这样
this.file.resolveLocalFilesystemUrl('file://'+数据)。然后(())
那么我就能够创建文件条目,我已经将其发送到服务器,并且服务器已经成功保存了视频。但我想更多地使用一种跨平台的方法,既可以在Android上运行,也可以在iOS上运行。使用Android时,您需要更正URL

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

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


我没有尝试这一点的原因是,这只是Android版本,如果使用iOS,该插件将如何解析路径?使用iOS时,您不需要解析路径。您需要检查是否在android上运行,然后更正路径。类似这样的东西:this.platfrom.is(“android”)。好的,我一定会尝试一下,但是你能详细说明一下为什么android会返回这种类型的URI吗(因为在某些情况下,它会返回URI中已经包含“file://”的URI,在这种情况下,插件的版本或版本将resolveNativePath起作用。基本上,我想了解更多有关URI方案的信息,以便您可以解释更多内容或将我重定向到一篇非常好的文章。您只需要在从库中挑选照片/视频时使用正确的路径。(PictureSourceType==PHOTOLIBRARY)。如果你拍了一张新照片或录制了一段新视频,你就不需要更正路径。看看文档:我尝试了文件路径插件,但它没有解析url。像这样使用
this.filePath.resolvationPath(videoData)。然后(url=>{console.log('resolved url',url);})
其中videoData是
/storage/simulated/0/DCIM/Camera/VID_20180312_210545.mp4
但它无法解析路径并抛出此错误字典
{code:0,消息:“无法解析文件系统路径”。}
您对此有任何官方解决方案吗?我正在讨论完全相同的问题。此外,如果您可以发布一些代码,将其视为上下文将非常好。提前感谢。我还没有找到永久解决方案,但我暂时使用了一些小技巧来解决此问题,我使用的是相同的code(有一些小改动)发布了上面的问题。以下是一些改动:
destinationType:this.camera.destinationType.FILE\u URI,
此代码返回一个视频块,我将其附加到formData,然后发送到后端
readVideoFileasGeneral(data){if(!data.includes('FILE://'))数据='file://'+数据;返回此.file.resolveLocalFilesystemUrl(数据)。然后((条目:FileEntry)=>{console.log('file entry',entry);//调试器;返回新承诺((resolve,reject)=>{entry.file((文件)=>{let fileReader=new fileReader();fileReader.onloadend=()=>{let blob=new blob([fileReader.result],{type:file.type});
resolve({blob:blob,file:file});};fileReader.readAsArrayBuffer(file);});}).catch((error)=>{//debugger;console.log('video file resolve error',error);//this.createNewFileEntry(data);})
复制并粘贴到某个编辑器中,使其缩进,看看您是否能理解它。