2012-03-26 5 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

あなたのドメインは白で表示されていますか? –

+0

はいテスト用ホワイトリストに*を設定しました – user1293545

+0

あなたのURLは無効です:hosting.domain.co.uk/ios/upload.php。先頭にhttp://を追加してみてください。 –

答えて

4

あなたがサポートされていないファイル形式のエラーを得ている理由である写真をアップロードするfileURIを使用しています。これは、fileURIが何らかの形式のfile://localhost/xx1.jpgになるためです。これはサーバー側のアップローダー機能ではサポートされません。

Javascriptがネイティブファイルシステム

にアクセスすることはできませんJavascriptがゆえ、それはPhoneGapの場合のファイル転送経由でアップロードすることはできません基本的なファイルシステムに直接アクセスすることはできません。

ソリューション

あなたの最善の策ではなく、画像のためのbase64でエンコードされた文字列をアップロードすることです。 destinationTypeの場合は、navigator.camera.DestinationType.DATA_URLというオプションを使用してbase64でエンコードされた画像を取得できます。これは、base64でエンコードされた文字列を返します。 jpgやpngの形式やファイル名などの関連メタデータを使って、json経由でサーバに簡単に送ることができます。

imgurが提供しているphonegapとオンライン画像ホスティング機能をうまく利用してください。hereをご覧ください。

幸運と乾杯

+0

DestinationType.DATA_URLの使用は、ここに記載されているように、phonegapでは推奨されません(メモリの問題があります): http://docs.phonegap.com/ja/2.7.0/cordova_camera_camera.md.html#camera.getPicture –

+0

説明!ありがとう –

関連する問題