2013-12-14 2 views
1

모바일 응용 프로그램에 두 가지 목표가 있습니다.Phonegap camera.getPicture 업로드시 문제가 발생했습니다.

a)는 휴대 전화의 카메라로 사진을 촬영하고 휴대 전화의 갤러리에서 사진을 선택하고 서버

내가 폰갭 및 포인트를 사용하고있다

에 업로드) 서버
B에 업로드 "a"는 잘 작동합니다. 또한 "b".

문제 : 매 초마다 업로드가 실패하는 것처럼 보입니다. 내가 "a"점 또는 "b"점으로 시작하든 상관 없습니다. 또는 무작위로 결합.

결과 :
1. 성공
2.
3. 성공
4.
4. 실패 실패 등
여기

"A"지점 내 코드입니다 :

function getImageCamera() { 
    navigator.camera.getPicture(uploadPhotoCamera, function(message) { 
    },{ 
     targetWidth: 1200, 
     targetHeight: 900, 
     quality: 75, 
     destinationType: navigator.camera.DestinationType.FILE_URI, 
     sourceType: navigator.camera.PictureSourceType.CAMERA 
    } 
    ); 
} 

및 점 "b":

function getImageGallery() { 
    navigator.camera.getPicture(uploadPhotoGallery, function(message) { 
    },{ 
     targetWidth: 1200, 
     targetHeight: 900, 
     quality: 75, 
     destinationType: navigator.camera.DestinationType.FILE_URI, 
     sourceType: navigator.camera.PictureSourceType.SAVEDPHOTOALBUM 
    } 
    ); 
} 

함수 uploadPhotoCamera 및 uploadPhotoGallery는 동일합니다.

12-14 22:44:15.303: W/FileTransfer(32613): Error getting HTTP status code from connection. 
12-14 22:44:15.303: W/FileTransfer(32613): java.io.EOFException 
12-14 22:44:15.303: W/FileTransfer(32613): at libcore.io.Streams.readAsciiLine(Streams.java:203) 
12-14 22:44:15.303: W/FileTransfer(32613): at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:573) 
12-14 22:44:15.303: W/FileTransfer(32613): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:821) 
12-14 22:44:15.303: W/FileTransfer(32613): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283) 
12-14 22:44:15.303: W/FileTransfer(32613): at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495) 
12-14 22:44:15.303: W/FileTransfer(32613): at org.apache.cordova.FileTransfer$1.run(FileTransfer.java:484) 
12-14 22:44:15.303: W/FileTransfer(32613): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
12-14 22:44:15.303: W/FileTransfer(32613): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
12-14 22:44:15.303: W/FileTransfer(32613): at java.lang.Thread.run(Thread.java:856) 
12-14 22:44:15.311: E/FileTransfer(32613): {"target":"http:\/\/some_IP\/api_upload.php","source":"file:\/\/\/storage\/emulated\/0\/Android\/data\/com.tisamobile\/cache\/resize.jpg?1387057455160","http_status":0,"code":3} 
12-14 22:44:15.311: E/FileTransfer(32613): java.io.EOFException 
12-14 22:44:15.311: E/FileTransfer(32613): at libcore.io.Streams.readAsciiLine(Streams.java:203) 
12-14 22:44:15.311: E/FileTransfer(32613): at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:573) 
12-14 22:44:15.311: E/FileTransfer(32613): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:821) 
12-14 22:44:15.311: E/FileTransfer(32613): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283) 
12-14 22:44:15.311: E/FileTransfer(32613): at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495) 
12-14 22:44:15.311: E/FileTransfer(32613): at org.apache.cordova.FileTransfer$1.run(FileTransfer.java:484) 
12-14 22:44:15.311: E/FileTransfer(32613): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
12-14 22:44:15.311: E/FileTransfer(32613): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
12-14 22:44:15.311: E/FileTransfer(32613): at java.lang.Thread.run(Thread.java:856) 
12-14 22:44:15.311: E/FileTransfer(32613): Failed after uploading 103425 of 103425 bytes. 

것은 무엇 잘못 될 수 : 여기

이클립스 로그입니까? 어떤 제안도 감사합니다.

+0

이 부분은 다음 주소에서 해결됩니다. http://stackoverflow.com/questions/17851259/phonegap-image-upload-works-only-once 9 월 7 일 5:07에 rand_mem_RAM 님이 작성했습니다. –

답변

2

getPicture 기능에 대해서는 문제가되지 않습니다.

나는 아주 간단한 해결책을 발견했습니다.

제 의견으로는, cordova 플러그인의 FileTransfer()는 파일 전송 종료에 대한 데이터를 서버로 보내지 않습니다.

따라서 서버는 각 파일의 경계를 인식 할 수 없으며 문제가 발생합니다.

var url = "http://www.upload-server-domain"; 
var imgFileURI = '/filepath/test.jpg'; 
var ft = new FileTransfer(); 

ft.upload('', encodeURI(url), null, null, null); // SOLUTION : fake upload     
ft.upload(imgFileURI, encodeURI(url), fnSuccessCallback, fnErrorCallback, options); // real upload 

가짜 업로드는 서버가 파일 전송을 알리는 것으로 간주됩니다.

, 내용 길이는

+0

이것은 또한 작동 할 수 있습니다, 나는 동의합니다. 내 해결책 : 오류가 발생하면 ft.upload를 다시 호출했습니다. –

+0

고마워요.) 트릭을 완벽하게 했어요. –

1

0 내가, 폰갭 2.9.0에서 같은 문제를 직면하고있는 문제를 해결하기 위해 많은 실패 시험을 수행 한 후, 나는 다음과 같은 않았다 때문에 - 나는 새로운 폰갭을 만들어 3.5 .0 프로젝트 - CLI에서 안드로이드 플랫폼을 구축했습니다. - 새 프로젝트 루트 폴더에 www 폴더를 복사했습니다. - CLI를 사용하여 필요한 모든 플러그인을 추가했습니다. - 최상위 config.xml 파일에서 필요한 변경을 수행했습니다. 아이콘 및 스플래시 화면 - 프로젝트를 실행했는데 지금은 괜찮습니다.

관련 문제