Cordova 相机返回 guid 不是 b64 或带有“xxx.png”的路径。需要上传文件

Posted

技术标签:

【中文标题】Cordova 相机返回 guid 不是 b64 或带有“xxx.png”的路径。需要上传文件【英文标题】:Cordova camera returning guid not b64 or path w/ "xxx.png". Need file for upload 【发布时间】:2016-06-10 18:54:02 【问题描述】:

Cordova(和 JS)新手,请保持温和。

我正在尝试让我的应用程序拍照,一切正常,直到将它们上传到服务器。图片拍得很好,编辑作品(如果选择了编辑)。

我得到的是 imageData(来自文档的变量),它似乎是一个 url 编码的 guid。 (为了确定,我尝试了一个 atob ——它不是 b64——这很清楚,但以防万一)。该文档甚至有一个部分说:

function onPhotoDataSuccess(imageData) 
// Uncomment to view the base64 encoded image data //<--- this...
// console.log(imageData);
....

但是如果我在那儿看,在发生任何事情之前,我会得到类似的东西:

blob:http%3A//localhost%3A4400/5d142c27-3908-4db4-87dd-0a22d6e5fd62

我已尝试发送 Camera.DestinationType.DATA_URL、FILE_URI 等。所有这些。我总是明白这一点 - 选项似乎并不重要。

所以,我有一个 blob。如果我尝试通过 xhr 请求获取它,则会收到 500 错误。如果我尝试使用文件助手插件(window.FilePath....我不认为那个人喜欢 blob 什么的。

如果我尝试导航到该位置,我只会得到:

Cannot GET /5d142c27-3908-4db4-87dd-0a22d6e5fd62

如果我尝试导航到以下内容:

content://media/external/images/media/2/d085fb44-de36-46ed-93a4-73f140f4bc3d

它也失败了。

如果我拆分 GUID 并使用它(替换“-”),我会得到类似的结果:

q×xÓMz-÷_u-ã®´-iÞ

所以我不认为是这样......

我已经尝试弄明白这几个小时了。有人可以指出我正确的方向吗?我看过其他文章,但似乎没有任何效果。我很确定这是因为我返回的格式。

如果这很简单,我很抱歉。我是操作系统、语言和科尔多瓦的新手,我在这里尽力而为。只是不确定我的下一步。

如果需要更多代码,请告诉我,我会更新它。不过,这一切仍然是样板文件。

【问题讨论】:

【参考方案1】:

如果其他人在这里结束,这是一个正确的修复(截至今天)。我在:Using PhoneGap, How to get base64 image data of the photo chosen from photo library in iPhone 找到它,感谢 revathy-durairajan:

创建这个函数。

function encodeImageUri(imageUri) 
var c = document.createElement('canvas');
var ctx = c.getContext("2d");
var img = new Image();
img.onload = function () 
    c.width = this.width;
    c.height = this.height;
    ctx.drawImage(img, 0, 0);
;
img.src = imageUri;
var dataURL = c.toDataURL("image/jpeg");
return dataURL;

使用 imageData 调用此函数

var testtest = encodeImageUri(imageData);

完成。

【讨论】:

以上是关于Cordova 相机返回 guid 不是 b64 或带有“xxx.png”的路径。需要上传文件的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 相机插件返回绿色图片 Windows Phone 8.1

Cordova 插件:无法检索图片的路径

Cordova 相机插件

Cordova Android - 相机没有所有选项

Cordova 相机 - 无法访问库

在 ionic Cordova 中找不到相机