Камера не работает в телефонной пробке, когда файлы на сервере? - PullRequest
0 голосов
/ 27 сентября 2011

Я написал клиент для моего сервера на основе мобильного jquery.Я просто не могу понять, как перенести фотографии на мой сервер, потому что когда я использую метод 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 ]

1 голос
/ 27 сентября 2011

Камера работает с PhoneGap, поэтому, если у пользователя есть ваш код, работающий как приложение, все в порядке.Он не будет работать как веб-приложение, потому что тогда нет телефонного промежутка.

Теперь главная проблема: POST может отказаться работать между доменами (не уверен, что для телефонного промежутка можно разрешить это).Если можете - используйте POST.Если нет, прочитайте:

GET может хранить столько данных, сколько браузер желает отправить и сервер хочет перехватить.Там нет стандарта.IE отправляет 2048 символов (2 КБ), FF - более 100 КБ и т. Д. Вы должны протестировать свой сервер и, возможно, настроить его на прием больших запросов GET.

Теперь самое интересное - если вы знаете длину GET, котораяВы можете передавать данные кусками.

  1. получить длину данных и разделить на длину чанка
  2. отправить результат в качестве первого запроса, чтобы сервер знал, сколько чанков ожидать
  3. отправить еще Nзапросы с порциями данных

Почему бы не отправить, а затем подтвердить, что все сделано?Ну, это асинхронный, так что вы никогда не знаете.

Это работает.Я сделал несколько разных реализаций отправки большого количества данных междоменных с JSONP

1 голос
/ 27 сентября 2011

Флимзи прав.Вы должны использовать POST-запрос для отправки этих огромных изображений.POST-запросы не ограничены по длине, как GET-запросы.

Кроме того, я не могу представить, чтобы камера работала правильно при использовании со страницы, загруженной удаленно.Такие вещи, как правило, помещаются в «песочницу» платформой.Я не могу сказать наверняка, что это не сработает, но я был бы очень удивлен, если бы это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...