2012-03-26 118 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); 
?> 

有任何明显的我做错了?

非常感谢

乔恩

+1

您是否列出了您的域名? – 2012-03-26 16:55:59

+0

是的,我已启用*为白名单进行测试 – user1293545 2012-03-27 08:57:29

+0

您的网址无效:hosting.domain.co.uk/ios/upload.php。尝试在前面添加http://。 – 2012-03-27 10:52:02

回答

4

您使用了fileURI上传照片,这就是为什么你所得到的不支持的文件格式错误。这是因为fileURI格式为file://localhost/xx1.jpg。这将不被服务器端的上传器功能支持。

JavaScript不能访问本地文件系统

JavaScript没有直接访问底层的文件系统,因此它不能在PhoneGap的情况下通过文件传输上传。

解决方案

你最好的选择是不是上传图像编码字符串中的Base64。您可以使用navigator.camera.DestinationType.DATA_URLdestinationType获得base64编码图像。这将返回base64编码的字符串。这可以很容易地通过JSON发送到服务器与相关的元数据,如JPG或PNG格式和文件名等。

看看here成功使用phonegap和imgur提供的在线图像托管设施。

祝您好运,欢呼

+0

使用DestinationType.DATA_URL不被phonegap建议(有内存问题),如下所示: http://docs.phonegap.com/zh/2.7.0/cordova_camera_camera.md.html#camera.getPicture – 2013-05-10 01:26:54

+0

Great解释!谢谢 – 2015-04-09 07:19:56