服务器中的文件时,相机无法在phonegap上工作?

时间:2011-09-27 02:48:51

标签: jquery-mobile cordova

我基于jquery mobile为我的服务器编写了一个客户端。我无法弄清楚如何将照片传输到我的服务器,因为当我使用GET方法发布base64字符串时,服务器说URI太长了。

因此,我尝试将网页和脚本移动到服务器,并将本地文件重定向到服务器页面。但是现在,我可以拍照,但是当我完成时似乎没有回调。

这就是我做的事情

var imgTakePhotoStatusBase64="Wyk+HjAxHTAyNzg3MDUdODQwHTAxOR0wMDAwMDAwMDAwMDAwMDAdRkRFQh0wMDAwMDAwHTA0MB0dMS8xHTUwLjVMQh1OHVcgMzR0aCBTdHJlZXQdQXVzdGluHVRYHSAeMDYdMTBaR0QwMDQdMTFaUmVjaXBpZW50IENvbXBhbnkgTmFtZR0xMlo5MDEyNjM3OTA2HTE0WioqVEVTVCBMQUJFTCAtIERPIE5PVCBTSElQKiodMjNaTh0yMlocWR0yMFogHDAdMjZaNjEzMxwdHgQ=";

function TextStatus(){
        var s=window.prompt("","请输入广播的内容");
        if(s!=null&&s!=""){
                SetStaus(s);
        }
}

$("#pageTakePhotoStatus").live("pageshow", function() {
        TakePhotoStatus()
});

function TakePhotoStatus(){
        imageData="";
        navigator.camera.getPicture(onTakePhotoStatusSuccess, onTakePhotoStatusFail, { quality: 75 });
}

function onTakePhotoStatusSuccess(imageData) {
    var image = document.getElementById('imgTakePhotoStatus');
    image.src = "data:image/jpeg;base64," + imageData;
        imgTakePhotoStatusBase64=imageData;
}

function onTakePhotoStatusFail(message) {
    alert('获取照片失败,因为: ' + message);
}

function TakePhotoStatusOk(){
        try
        {
                var myDate = new Date();
        var r=myDate.getTime();
                var path="uploads.share/"+r+"/"+r+".jpg";
            doMethod("ImageUploadByBase64String","{'str':'"+e(imgTakePhotoStatusBase64)+"','path':'"+e(path)+"'}",null,
        function(result){
                            doMethod("PublishPhotoes","{'located':'false','path':'"+e(path)+"','text':'"+e("描述:"+$("#txaTakePhotoStatusDes").val())+"'}",null,
                function(r){
                    alert("您的照片已经发布");
                                        history.back();
                });
        });
        }catch(err)
        {
        alert(err.description);
        }
}

但是我拍照时onTakePhotoStatusSuccess不起作用。当我在当地运行时,它很好。

2 个答案:

答案 0 :(得分:1)

Flimzy是对的。您应该使用POST请求发送回那些巨大的图像。 POST请求不受GET请求的长度限制。

另外,我无法想象从远程加载页面使用相机时相机是否正常工作。这种东西通常由平台沙箱化。我不能肯定地说它不起作用,但如果确实如此,我会非常惊讶。

答案 1 :(得分:1)

相机适用于phonegap,因此如果用户将您的代码作为应用程序运行,则可以。 它不能用作webapp,因为那时没有手机功能。

现在主要问题: POST可能拒绝跨域工作(不确定是否可以将phonegap设置为允许它)。如果可以 - 使用POST。如果没有,请阅读:

GET可以保存浏览器愿意发送的数据,服务器也愿意接收。没有标准。 IE发送2048个字符(2kb),FF发送超过100kb等。 您必须测试您的服务器,并可能将其配置为接受大型GET查询。

现在有趣的部分 - 如果您知道可用的GET长度,您可以以块的形式传输数据。

  1. 获取数据长度并除以块长度
  2. 将结果作为第一个查询发送,以便服务器知道预期的块数
  3. 使用数据块发送N个更多查询
  4. 为什么不发送然后确认一切都完成了?嗯,它是异步的,所以你永远不会知道。

    这很有效。我做了一些使用JSONP

    发送大量跨域数据的不同实现