2012-03-26 6 views
1

아주 기본적인 사진 업로드 기능을 만들려고합니다. 나는 많은 튜토리얼과 예제를 온라인으로 따라 왔지만 실제로 작동하도록하는 데 몇 가지 문제가있다.Phonegap : 사진이 업로드되지 않습니다.

현재 나는 다음과 같은 오류가 나타날 :

2012-03-26 17:37:02.107 Upload[84710:13403] fileData length: 72154 
2012-03-26 17:37:02.119 Upload[84710:13403] File Transfer Error: unsupported URL 
2012-03-26 17:37:02.121 Upload[84710:13403] [INFO] Error in error callback: org.apache.cordova.filetransfer1 = ReferenceError: Left side of assignment is not a reference. 

이 내 폰갭의 HTML 파일입니다

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <title>File Transfer Example</title> 
    <script type="text/javascript" charset="utf-8" src="cordova-1.5.0.js"></script> 
    <script type="text/javascript" charset="utf-8"> 

     // Wait for PhoneGap to load 
     document.addEventListener("deviceready", onDeviceReady, false); 

     // PhoneGap is ready 
     function onDeviceReady() { 
    // Do cool things here... 
     } 

     function getImage() { 
      // Retrieve image file location from specified source 
      navigator.camera.getPicture(uploadPhoto, function(message) { 
alert('get picture failed'); 
},{ 
quality: 50, 
destinationType: navigator.camera.DestinationType.FILE_URI, 
sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY 
} 
      ); 

     } 

     function uploadPhoto(imageURI) { 
      var options = new FileUploadOptions(); 
      options.fileKey="file"; 
      options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1); 
      options.mimeType="image/jpeg"; 

      var params = new Object(); 
      params.value1 = "test"; 
      params.value2 = "param"; 

      options.params = params; 
      options.chunkedMode = false; 

      var ft = new FileTransfer(); 
      ft.upload(imageURI, "hosting.domain.co.uk/ios/upload.php", win, fail, options); 
     } 

     function win(r) { 
      console.log("Code = " + r.responseCode); 
      console.log("Response = " + r.response); 
      console.log("Sent = " + r.bytesSent); 
      alert(r.response); 
     } 

     function fail(error) { 
      alert("An error has occurred: Code = " = error.code); 
     } 

     </script> 
</head> 
<body> 
    <button onclick="getImage();">Upload a Photo</button> 
</body> 
</html> 

그리고 이것은 내 upload.php로 파일입니다

<?php 
print_r($_FILES); 
$new_image_name = "namethisimage.jpg"; 
move_uploaded_file($_FILES["file"]["tmp_name"], "/var/www/vhosts/domain.co.uk/subdomains/hosting/httpdocs/ios/uploads".$new_image_name); 
?> 

가 있는가 내가 잘못하고있는 것이 무엇이든간에?

덕분에 많은

+1

도메인 목록에 흰색이 있습니까? –

+0

예 테스트 용 화이트리스트에 *를 사용했습니다 – user1293545

+0

귀하의 URL이 유효하지 않습니다 : hosting.domain.co.uk/ios/upload.php. 앞에 http : //를 추가하십시오. –

답변

4

당신이 지원되지 않는 파일 형식 오류가 발생하는 이유는 사진을 업로드 할 fileURI 내를 사용하고 있습니다. 이것은 fileURI 형식이 file://localhost/xx1.jpg 일 것이기 때문입니다. 이것은 서버 측의 업 로더 기능에 의해 지원되지 않습니다.

자바 스크립트가 기본 파일 시스템

에 액세스 할 수 없습니다 자바 스크립트 따라서는 폰갭의 경우 파일 전송을 통해 업로드 할 수 없습니다 기본 파일 시스템에 직접 액세스 할 수 없습니다.

솔루션

가장 좋은 대신 이미지에 대한 문자열을 base64 인코딩을 업로드하는 것입니다. destinationType의 경우 navigator.camera.DestinationType.DATA_URL 옵션을 사용하여 base64 인코딩 이미지를 얻을 수 있습니다. base64로 인코딩 된 문자열을 반환합니다. jpg 또는 png 형식 및 파일 이름과 같은 관련 메타 데이터를 사용하여 json을 통해 서버로 쉽게 전송할 수 있습니다.

imgur에서 제공하는 phonegap 및 온라인 이미지 호스팅 기능을 성공적으로 사용했는지 확인하십시오. here

행운과 건배

+0

DestinationType.DATA_URL을 사용하면 여기에 언급 된대로 phonegap (메모리 문제가 있음)을 사용하지 않는 것이 좋습니다. http://docs.phonegap.com/en/2.7.0/cordova_camera_camera.md.html#camera.getPicture –

+0

위대한 설명! 감사 –

관련 문제