2016-11-15 8 views
0

この問題の解決策を見つけることができるかどうかを調べるために検索しましたが、残念ながら十分なものはありません。ユニコードガベージを使用している「グローバルデータ内のキー文字を無効にする」

写真アップロード機能(cordova-filetransferプラグインを使用)を使用してIonicアプリを構築していて、画像を受け取るようにAPIエンドポイントを設定しています。 Ionic JSはイメージを正常に処理できますが、APIは「disallowed keys」エラーで応答します。それだけでは、乱雑な乱暴なナンセンスがいっぱいです。

clean_input機能:

public function clean_input_keys($str) 
{ 
    $chars = PCRE_UNICODE_PROPERTIES ? '\pL' : 'a-zA-Z'; 


    if (! preg_match('#^['.$chars.'0-9:_.-]++$#uD', $str)) 
    { 
     exit('Disallowed key characters in global data: '.$str."\n [GLOBAL vars] \n".Kohana::debug($GLOBALS)); 
    } 

    return $str; 
} 

フル応答:

Disallowed key characters in global data: '()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÛ 
[GLOBAL vars] 
<pre>array: </pre> 

モバイルアプリからuploadImage機能:

$scope.uploadImage = function(datetime) { 

     // Destination URL 
     var uploadUrl = "url/goes/here"; 

     // File for Upload 
     var imagePath = $scope.urlForImage($scope.image); 
     console.log('Path: '+imagePath); 

     // File name only 
     var filename = $scope.addZero(datetime.getDate()) + $scope.addZero((datetime.getMonth() + 1)) + datetime.getFullYear() + '-' + $scope.addZero(datetime.getHours()) + $scope.addZero(datetime.getMinutes()) + '-' + $scope.incidentData.store + '-' + $scope.incidentData.location + '.jpg'; 
     filename = filename.replace(/\s+/g, ''); 
     console.log('Filename: '+filename); 

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

     var fail = function (error) { 
      alert("An error has occurred: Code = " + error.code); 
      console.log("Upload error source " + error.source); 
      console.log("Upload error target " + error.target); 
     }; 


     var options = new FileUploadOptions(); 
     options.fileKey = "image"; 
     options.fileName = filename; 
     options.chunkedMode = false 
     //mimeType: "multipart/form-data", 
     options.mimeType = "image/jpeg"; 

     var params = {}; 
     params.fileName = filename; 

     options.params = params; 

     var headers = { 
       "API-Key": "keygoeshere", 
       "Content-Type": "application/x-www-form-urlencoded" 
      }; 

     options.headers = headers; 

     var ft = new FileTransfer(); 

     ft.upload(imagePath, uploadUrl, success, fail, options); 
    } 

そしてAPIエンドポイント機能:

public function upload_image() 
{ 
    $this->authorise(); 

    $file_temp = $_FILES['image']['tmp_name']; 
    $file_name = $_FILES['image']['name']; 
    $target_path = 'path/goes/here'; 

    if (move_uploaded_file($file_temp, $target_path.$file_name)) { 
     Kohana::log('debug', 'File received: '.$_FILES['image']['name']); 
     Kohana::log_save(); 
    } else { 
     Kohana::log('debug', 'Photo upload failed'); 
     Kohana::log_save(); 
    } 
} 

申し訳ありませんが、コードが多すぎますが、このエラーの原因となっている私の人生ではうまくいきません。

答えて

1

問題はヘッダーであることが判明しました。プラグインが既定で送信しているヘッダー(コンテンツタイプ)を投稿していました。 2人は衝突してエラーを引き起こしていました。

APIキーのみを残してこのヘッダーを削除すると、画像を送信できました。

関連する問題