2016-11-15 2 views
0

Искал через переполнение, чтобы увидеть, могу ли я найти решение этой проблемы, но, к сожалению, ничего похожего не достаточно.«Запрещенные ключевые символы в глобальных данных» с мусором Unicode

Я создаю приложение Ionic с функцией загрузки фотографий (используя плагин cordova-filetransfer) и имею конечную точку API, настроенную для получения изображения. Ionic JS способен обрабатывать изображение успешно, но API отвечает на ошибку с ошибкой «запрещенных ключей»; только она полна случайных искаженных глупостей.

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

Вопрос оказался заголовком: я публиковал заголовок (Content-Type), который плагин уже отправляет по умолчанию; они столкнулись и вызвали ошибку.

Удаление этого заголовка, оставив только API-ключ, позволило отправить изображение.

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