2012-03-26 3 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. 

Это мой PhoneGap 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); 
?> 

Есть что-то очевидное, что я ошибаюсь?

Большое спасибо

Jon

+1

У вас есть белый список вашего домена? –

+0

Да, я включил * для белого списка для тестирования – user1293545

+0

Ваш URL-адрес недействителен: hosting.domain.co.uk/ios/upload.php. Попробуйте добавить http: // впереди. –

ответ

4

Вы используете fileURI загрузить фотографию, поэтому вы получаете неподдерживаемые ошибки формата файла. Это потому, что файлURI будет чем-то вроде формата file://localhost/xx1.jpg. Это будет неподдерживаться функцией uploader на стороне сервера.

Javascript не может получить доступ к родной файловой системе

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

Решение

Лучше всего, чтобы вместо того, чтобы загрузить в формате base64 строку для изображения. Вы можете получить кодированное изображение base64, используя опцию navigator.camera.DestinationType.DATA_URL для destinationType. Это вернет строку с кодировкой base64. И это может быть легко отправлено через json на сервер с соответствующими метаданными, такими как jpg или png формат и имя файла и т. Д.

Обратите внимание: here Успешное использование phonegap и онлайн-услуги по размещению изображений, предоставляемой imgur.

Удачи и приветствия

+0

Использование DestinationType.DATA_URL не рекомендуется по телефонной книге (есть проблемы с памятью), как указано здесь: http://docs.phonegap.com/ru/2.7.0/cordova_camera_camera.md.html#camera.getPicture –

+0

Отличный объяснения! благодаря –

Смежные вопросы