【发布时间】:2015-10-04 17:05:13
【问题描述】:
我正在尝试使用 Cordova 相机插件拍照。拍完照片后,我创建了一个新的 FormData 对象来附加图像。我获取相机创建的 Base64 图像并将其转换为 Blob,然后将其附加到新的 FormData 对象。不幸的是,Blob 从未附加。
我有一个运行 Android 5.1.1 的 Nexus 5。我使用 Cordova 5.1.1 和 CordovaLib 4.0.2 构建了一个应用程序。我安装了以下插件:
cordova 插件设备 科尔多瓦插件应用浏览器 科尔多瓦插件相机 科尔多瓦插件文件 科尔多瓦插件文件传输 科尔多瓦插件白名单
Cordova 4.3.1 和 CordovaLib android 3.7.2 也会出现同样的问题。
这是我用来激活设备摄像头的 sn-p 代码。
navigator.camera.getPicture(
onSuccess,
onFailure,
{
quality: 50,
destinationType: Camera.DestinationType.DATA_URL,
cameraDirection: Camera.Direction.FRONT
}
);
这里是成功和失败的函数。
function onSuccess(URI) {
var the_file = new Blob([window.atob(URI)], {type: 'image/jpeg', encoding: 'utf-8'});
try {
var fd = new FormData();
fd.append('Filedata', the_file, "selfie.jpg");
} catch (e) {
throw e;
}
console.log(the_file.size);
console.log(the_file.type);
console.log(JSON.stringify(fd));
}
function onFailure(e) {
console.log(e);
}
当我运行此代码时,我会在 Android Studio 中监控控制台输出。我可以看到 the_file.size 和 the_file.type 是正确的。但是,FormData 的“JSON.stringify”显示一个空对象“{}”。
我知道我应该在 Cordova 中使用 FILE_URL 而不是 DATA_URL 来节省内存,但我现在只需要调试这个 FormData 问题。一旦我让这个示例正常工作,我将在将应用程序投入生产之前重构我的代码以使用 FILE_URL。我想关注为什么 FormData.append 函数不适用于我正在创建的 Blob。任何见解将不胜感激!
谢谢, 亚伦
【问题讨论】:
标签: javascript android file cordova form-data