【问题标题】:Save phonegap captured images to parse保存 phonegap 捕获的图像以进行解析
【发布时间】:2014-09-10 23:43:55
【问题描述】:

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

【问题讨论】:

    标签: javascript ajax image cordova


    【解决方案1】:

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

    【讨论】:

    • 这正是我所做的。但我无法仅使用其位置发送图像。我应该将其转换为 base64 还是文件对象然后上传。如果是,如何在 javascript 中使用 uri 创建文件对象。我已经坚持了很长时间了。
    • @user3646217 抱歉,我打错了。我的意思是 Native_URI
    【解决方案2】:

    您需要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 直接上传要慢得多。

    【讨论】:

    • 所以问题是,您建议的第一个选项不适用于 Parse RESTAPI。阅读 (parse.com/questions/…) 对于第二个选项,我不需要使用画布元素进行转换,因为 phonegap 本身允许我这样做,只需设置 Camera.DestinationType.DATA_URL。问题是即使在得到base64编码的字符串后如何存储它以解析为png文件的形式?
    • @user3646217 上次我需要在 Phonegap 中存储 dataUrl 时,他们没有 DATA_URL 选项,所以这是一个不错的新功能。我认为您的问题更像是我从未使用过的 Parse 问题。如果您控制后端,则可以通过剥离 dataUrl 包装器和 base64 解码结果轻松地将 dataUrl 转换为文件,但是我之前没有使用过 parse ,但稍微搜索了一下,发现:parse.com/questions/… 可能会做你想做的事需要。
    猜你喜欢
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多