如何从使用 Ionic 框架中的相机插件选择的视频文件 URI 创建 Blob?

Posted

技术标签:

【中文标题】如何从使用 Ionic 框架中的相机插件选择的视频文件 URI 创建 Blob?【英文标题】:How to create a Blob from video File URI selected using Camera Plugin in Ionic Framework? 【发布时间】:2020-04-26 20:23:57 【问题描述】:

在我的 Ionic 3 应用程序中,我使用 Camera Plugin 从图库中选择视频文件。

它以 FILE_URI 的形式提供视频,我需要从该 FILE_URI 创建一个 Blob

我正在使用 File Plugin 来实现这一点。

下面是我目前的代码。

const options: CameraOptions = 
    mediaType: this.camera.MediaType.VIDEO,
    sourceType: this.camera.PictureSourceType.PHOTOLIBRARY
;
this.camera.getPicture(options)
    .then(async (videoData) => 

        if (videoData) 

            const filename = videoData.substr(videoData.lastIndexOf('/') + 1);
            let dirpath = videoData.substr(0, videoData.lastIndexOf('/') + 1);
            dirpath = dirpath.includes("file://") ? dirpath : "file://" + dirpath;

            try 
                this.file.readAsArrayBuffer(dirpath, filename)
                    .then((res) => 
                        try 
                            const blob = new Blob([res],  type: 'video/mp4' );
                         catch (error) 
                            // TODO: Handle error
                        
                    ).catch((err) => 
                        // TODO: Handle error
                    );
             catch (error) 
                // TODO: Handle error
            
        
    , (err) => 
        // TODO: Handle error
    );

我需要知道是否可以从使用 Camera Plugin 选择的 FILE_URI 和 If不可能接受任何建议。

【问题讨论】:

【参考方案1】:

您可以使用File.ReadAsDataURL。试试这样的:

const options: CameraOptions = 
  mediaType: this.camera.MediaType.VIDEO,
  sourceType: this.camera.PictureSourceType.PHOTOLIBRARY
;

this.camera.getPicture(options).then(async (videoData) => 
  if (videoData) 
    const filename = videoData.substr(videoData.lastIndexOf('/') + 1);
    let dirpath = videoData.substr(0, videoData.lastIndexOf('/') + 1);
    dirpath = dirpath.includes("file://") ? dirpath : "file://" + dirpath;

    try 
      this.file.readAsDataURL(dirpath, filename).then(blob => 
        uploadBlobToServer(blob);

      ).catch((err) =>              
           // TODO: Handle error
      );
      catch (error) 
         // TODO: Handle error
     
  
, (err) => 
    // TODO: Handle error
);

【讨论】:

以上是关于如何从使用 Ionic 框架中的相机插件选择的视频文件 URI 创建 Blob?的主要内容,如果未能解决你的问题,请参考以下文章

Ionic Camera Preview 插件是不是提供全质量图片?

ionic 3从相机上传图像不使用文件,文件传输,文件上传插件

如何在 Cordova Opentok 插件中隐藏/显示视频以在 Ionic 中进行视频通话?

使用 Ionic 使用相机拍摄多张照片

Cordova 相机插件 IOS 11 无法从库中选择图像

使用 Ionic / ngCordova 将相机/屏幕方向锁定为横向