Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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
Javascript readAsArrayBuffer返回空数组(尝试将视频转换为blob并上载)_Javascript_Arrays_Reactjs_Ionic Framework_Arraybuffer - Fatal编程技术网

Javascript readAsArrayBuffer返回空数组(尝试将视频转换为blob并上载)

Javascript readAsArrayBuffer返回空数组(尝试将视频转换为blob并上载),javascript,arrays,reactjs,ionic-framework,arraybuffer,Javascript,Arrays,Reactjs,Ionic Framework,Arraybuffer,我正试图上传一个视频使用离子/电容器/反应 为此,我使用cordova video capture plus插件 当我试图阅读ArrayBuffer时,我被卡住了。出于某种原因,它总是返回空的,在我的代码下面: const doMediaCapture = async () => { let options: VideoCapturePlusOptions = { limit: 1, duration: 30 }; let capture:any = await VideoCaptureP

我正试图上传一个视频使用离子/电容器/反应

为此,我使用cordova video capture plus插件

当我试图阅读ArrayBuffer时,我被卡住了。出于某种原因,它总是返回空的,在我的代码下面:

const doMediaCapture = async () => {
let options: VideoCapturePlusOptions = { limit: 1, duration: 30 };
let capture:any = await VideoCapturePlus.captureVideo(options);
let media = capture[0] as MediaFile;
// works on android....
let resolvedPath: DirectoryEntry;
let path = media.fullPath.substring(0, media.fullPath.lastIndexOf("/"));
if (Capacitor.getPlatform() === "ios") {
  console.log("ios")
  resolvedPath = await File.resolveDirectoryUrl("file://" + path);
} else {
  console.log("android")
  resolvedPath = await File.resolveDirectoryUrl(path);
}

console.log(media)
console.log(resolvedPath)
 File.readAsArrayBuffer(resolvedPath.nativeURL, media.name).then(
  (buffer: any) => {
    console.log(buffer)
    // get the buffer and make a blob to be saved
    let videoBlob: Blob = new Blob([buffer], {
      type: media.type,
    });
    let url = window.URL.createObjectURL(videoBlob);
    
    console.log(videoBlob)
    let { jobId } = apartments[+id!];
    if (videoBlob instanceof Blob) {
      console.log("processing as File");
      let fName = `${new Date().getTime()}`;

      if (videoBlob instanceof Blob) {
        if (videoBlob.type.split("/")[1] === "quicktime") {
          fName = fName + ".mov";
        } else {
          fName = fName + "." + videoBlob.type.split("/")[1];
        }
      }
      let ref = "videos/" + fName
      uploadVideo(jobId, videoBlob, ref)
    } else {
      console.log("processing as DataAsDataUrl");
      let v = videoBlob as DataAsDataUrl;
      let fName = `${new Date().getTime()}.${v.format}`;
      let ref = "images/" + fName
      uploadVideo(jobId, videoBlob, ref)
    }
  },
  (error:any) => console.log(error)
);
})

我得到以下输出,它是一个空数组,因此如果我尝试上载它,它不会上载任何内容:


如何将该视频文件转换为blob以上载?

requestLegacyExternalStorage-在AndroidManifest中设置是否正确

解决方案是停止使用video capture plus插件,因为它似乎与不同的手机存在兼容性问题。 我继续使用本机插件media capture及其方法MediaCapture.captureVideo()

安装以下插件: @ionic native/media capture:“^5.24.0” 其科尔多瓦对应物: “cordova插件媒体捕获”:“^3.0.3”