我基于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
不起作用。当我在当地运行时,它很好。
答案 0 :(得分:1)
Flimzy是对的。您应该使用POST请求发送回那些巨大的图像。 POST请求不受GET请求的长度限制。
另外,我无法想象从远程加载页面使用相机时相机是否正常工作。这种东西通常由平台沙箱化。我不能肯定地说它不起作用,但如果确实如此,我会非常惊讶。
答案 1 :(得分:1)
相机适用于phonegap,因此如果用户将您的代码作为应用程序运行,则可以。 它不能用作webapp,因为那时没有手机功能。
现在主要问题: POST可能拒绝跨域工作(不确定是否可以将phonegap设置为允许它)。如果可以 - 使用POST。如果没有,请阅读:
GET可以保存浏览器愿意发送的数据,服务器也愿意接收。没有标准。 IE发送2048个字符(2kb),FF发送超过100kb等。 您必须测试您的服务器,并可能将其配置为接受大型GET查询。
现在有趣的部分 - 如果您知道可用的GET长度,您可以以块的形式传输数据。
为什么不发送然后确认一切都完成了?嗯,它是异步的,所以你永远不会知道。
这很有效。我做了一些使用JSONP
发送大量跨域数据的不同实现