保存手机拍摄的图像以进行解析

时间:2014-07-20 08:23:36

标签: javascript ajax image cordova

我试图保存使用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");
        }
    });
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您需要FileTransfer API来获取文件的内容。在uploadPhoto回调中插入以下内容:

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有一个很好的video tutorial代码,其中包含如何执行此操作的代码。另一个解决方案是base64结果,在此设置您创建的图像的src为fileUri,然后将图像绘制到画布上并获取画布的dataUrl。此方法适用于旧版本的PhoneGap,但比使用FileTransfer API直接上传要慢得多。