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