Javascript 保存phonegap捕获的图像以进行分析

Javascript 保存phonegap捕获的图像以进行分析,javascript,ajax,image,cordova,Javascript,Ajax,Image,Cordova,我正在尝试保存使用Phonegap的照相机API拍摄的照片。函数返回文件uri。当我保存它时,它直接保存字符串uri而不是文件。 我甚至尝试将内容类型指定为ajax头文件中的图像。给了我一个断开的链接 function capturePhoto(){ //alert(address); navigator.camera.getPicture(uploadPhoto,onFail,{sourceType:1,quality:60,destinationType: Camera.De

我正在尝试保存使用Phonegap的照相机API拍摄的照片。函数返回文件uri。当我保存它时,它直接保存字符串uri而不是文件。 我甚至尝试将内容类型指定为ajax头文件中的图像。给了我一个断开的链接

function capturePhoto(){
    //alert(address);
    navigator.camera.getPicture(uploadPhoto,onFail,{sourceType:1,quality:60,destinationType: Camera.DestinationType.FILE_URI});
}

function uploadPhoto(data){
    var serverUrl = 'https://api.parse.com/1/files/myphoto.jpg';
    $.ajax({
        type: "POST",
        headers: {'X-Parse-Application-Id': PARSE_APP,
        'X-Parse-REST-API-Key':PARSE_REST
        // "Content-Type": "image/png"
    },
        url: serverUrl,
        data: data,
        processData: false,
        contentType: false,
        success:function(e){
            console.log(e.url);
        },
        error:function(){
            console.loh("ERROR");
        }
    });
}

您需要使用
destinationType:Camera.destinationType.Native\u URI
。这将返回图像在设备上的实际位置,通常类似于
file://storage/0/sdcard/...
。然后可以使用此位置加载/发送/操作图像

您需要获取文件的内容。在上载照片回调中插入以下内容:

function uploadPhoto(data){
    var ft = new FileTransfer();
    var options = new FileUploadOptions();

    options.mimeType = "image/jpeg";
    options.chunkedMode = false;
    options.params = { // Any params you need...
    };

    ft.upload(data, 'https://api.parse.com/1/files/myphoto.jpg',
        function (e) {
            console.log('Success');
        },
        function (e) {
           alert("Upload failed");
        }, options);
}

您可能需要根据后端(尚未指定)更改某些选项和参数。克里斯托弗·科恩雷茨(Christopher Coenraets)对如何做到这一点的代码有很好的理解。另一个解决方案是base64结果,在这个方案中,您将创建的图像的src设置为fileUri,然后将图像绘制到画布上,并获取画布的dataUrl。此方法适用于旧版本的PhoneGap,但比使用FileTransfer API直接上载要慢得多。

这正是我所做的。但我无法仅使用图像的位置发送图像。我应该将其转换为base64或文件对象,然后上载吗。如果是,请说明如何在javascript中使用uri创建文件对象。我已经在这方面花了很长时间了。@user3646217 Oi抱歉,我键入了错误的文件对象。我的意思是,你建议的第一个选项不适用于Parse RESTAPI。Read(),对于第二个选项,我不需要使用canvas元素对其进行转换,因为phonegap本身允许我这样做,只需设置Camera.DestinationType.DATA\u URL即可。问题是,即使在获得base64编码字符串之后,如何将其存储为png文件的形式进行解析?@user3646217上次我需要在Phonegap中存储dataUrl时,他们没有DATA_URL选项,因此这是一个很好的新功能。我认为你的问题更像是一个解析问题,我从来没有用过。如果您控制后端,您可以通过剥离dataUrl包装器并对结果进行base64解码,轻松地将dataUrl转换为文件,但是我以前没有使用过parse,只是在Google上搜索了一下,发现了以下问题:这可能会满足您的需要。