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);})
复制并粘贴到某个编辑器中,使其缩进,看看您是否能理解它。