如何获取科尔多瓦相机成功回调的文件对象?

Posted

技术标签:

【中文标题】如何获取科尔多瓦相机成功回调的文件对象?【英文标题】:How to get the file object on success callback of cordova camera? 【发布时间】:2018-04-25 01:31:15 【问题描述】:

目前我正在使用以下方法,它提供文件的详细信息,而不是实际对象,它看起来像是我们在 javascript/jQuery 中获得的对象。有没有人知道如何使用cordova和javascript从移动ios/android文件系统的文件URI/本机URI获取文件对象?

下面是我目前使用的sn-p..

window.resolveLocalFileSystemURL(
  filepath,
  function(fileEntry) 
    fileEntry.file(
      function(file) 
        var reader = new FileReader();
        reader.onloadend = function() 
          var imgBlob = new Blob([this.result], type: "image/jpeg");
          var uploadedFile = imgBlob;
          uploadedFile.name = file.name;
          alert("Importing Asset from Camera.. " + uploadedFile.name);
          alert(uploadedFile.type);
          alert(uploadedFile.size);
          importAsset(uploadedFile);
        ;
        reader.readAsArrayBuffer(file);
      ,
      function(error)  alert("Error in fileEntry.file():" + error) )
  ,
  function(error)  alert("Error in window.resolveLocalFileSystemURL():" + error) 
);

注意:FileTransfer.upload() 在我的情况下不起作用。

在通过#SO 的现有问答后,我从Append image file to form data - Cordova/Angular 获取后使用的 sn-p 上方

【问题讨论】:

在使用 Filetransfer.upload() 时,我无法发送包含多个 blob 的复杂多部分/表单数据请求。因此寻找替代品。 【参考方案1】:

Base64 图像上传将在 iOS/Android 中工作,正如我所尝试的: 至于iOS只有一种显示图像的方法是使用base64格式。您可以使用cordova-camera-plugin生成base64图像并放在html的img标签上。我已经设置了以jpeg,base64格式获取数据的标志相机插件。

<img id="cardImg">

将base64图像存储在javascript变量中:

var imgdata=data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==

然后只需将数据传递给 HTML 的 img 标签:

cardImg.src=imgdata;

完成!

【讨论】:

我不希望显示为图像。请再次仔细阅读问题。 我已经发布了一个使用 Base64 方法来显示图像的答案,因为它更通用并且适用于 android 和 iOS。 Android 会导致一些问题:对于针对 Android 7.0(API 级别 24)及更高版本的最新应用程序,跨包边界传递 file:// URI 会导致 FileUriExposedException。因此,在原生 android 中,我们得到 content:// uri 而不是 file。

以上是关于如何获取科尔多瓦相机成功回调的文件对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用科尔多瓦相机插件重播录制的视频?

Cordova 如何从相机旋转图片

如何在paytm回调响应中获取extendInfo和userInfo对象

如何在科尔多瓦相机中保存自定义名称的照片

如何设法在科尔多瓦获取我的安卓手机的纬度和经度?

如何在科尔多瓦获取当前位置时修复“REQUEST_DENIED”