【发布时间】:2018-08-20 19:48:07
【问题描述】:
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的一些url。 (仅供参考:我目前正在android平台上进行测试)。我可以通过简单地将视频放入 video src 来预览视频,但我无法将此视频发送到服务器。
这是我用来从返回的/storage 类似 URL 中获取视频文件然后将视频发送到服务器的方法。
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://”添加到数据中,然后像 this.file.resolveLocalFilesystemUrl('file://'+data).then(()) 这样将其传递给 resolveLocalFilesystemUrl(),那么我就可以创建我已经创建的文件条目发送到服务器,服务器已成功保存视频。但我想使用更多适用于 Android 和 iOS 的跨平台方法
【问题讨论】:
-
您对此有任何官方解决方案吗?我正在经历完全相同的问题。此外,如果您可以发布一些代码,很高兴看到它的上下文化。提前致谢。
-
我还没有找到一个永久的解决方案,但我暂时使用了一些小技巧来解决这个问题,并且我正在使用相同的代码(有一些小的改动)张贴上面的问题。以下是一些更改:
destinationType: this.camera.DestinationType.FILE_URI, -
此代码返回一个视频 blob,我将其附加到 formData,然后我将其发送到后端
readVideoFileasGeneral(data) { if(!data.includes('file://')) data = 'file://' + data; return this.file.resolveLocalFilesystemUrl(data).then((entry: FileEntry) => { console.log('file entry', entry); // 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); }); }) }).catch((error) => { // debugger; console.log('video file resolve error', error); // this.createNewFileEntry(data); }); -
复制并粘贴到某个编辑器中以缩进它,看看你是否能理解它。
标签: ionic-framework ionic3 ionic-native