2017-01-06 4 views
1

ребята, у меня проблема с отправкой json-данных через alamofire 4 с помощью swift3, а также с проблемой получения json-данных на стороне сервера XAMPP с использованием php. Мой скор 3 код сделал запустить скрипт PHP на XAMPP, но почему-то я не могу получить его через $ _POST переменной в PHP Вот мой код,

func uploadImage(image: UIImage){ 
    //Now use image to create into NSData format 
    let imageData:NSData = UIImagePNGRepresentation(image)! as NSData  
    //convert the nsdata to base64 encoded string 
     let strBase64:String = imageData.base64EncodedString(options: .lineLength64Characters) 
    // let parameters = ["image": strBase64] as Dictionary 
    let parameters = ["image": strBase64]  
    print(strBase64) 
    Alamofire.request("http://localhost/Test/api/UploadPhoto.php",method: .post, parameters: parameters, encoding: JSONEncoding.default).response { response in    
    print(response)     
       } 
} 

Вот мой код на стороне сервера (скрипт сделал получить срабатывает при вызове из alamofire, но почему-то я просто не могу получить данные через вызова $ _POST [ «образ»])

<?php 
//scripts below did get triggered, but can't get the json data through   calling $_POST["image"]; 
$imageString = $_POST["image"]; 
$filename_path = md5(time().uniqid()).".png"; 
$data = base64_decode($imageString); 
file_put_contents('../AllImages/'.$filename_path, $data); 
echo json_encode($_POST["image"]); 
?> 

, если это возможно, пожалуйста, помогите мне, я уже боролись в течение почти недели , но не может найти много ключей Thank you

+0

Вы просмотрели сетевой запрос в Chrome Inspector? Вы посмотрели на 'var_dump ($ _ POST);'? –

+0

Я новичок здесь, но как мы проверяем вывод консоли на сервере xampp при получении запросов? а также я пытался использовать почтальон для отправки json-данных в php-скрипт, он работал отлично, но когда я отправляю запросы со стороны ios, он просто не может получить значение из $ _POST –

+0

XAMPP не получает запросы. Ваш браузер. Однако вы можете посмотреть журналы доступа apache. Мой комментарий, однако, касался инспектора Chrome. Это часть программного обеспечения в Google Chrome, браузере. –

ответ

0

я нашел способ решить эту проблему, в основном, я использовал urlsession.shared.datatask, чтобы помочь мне вместо alamofire с запросом на пост, вот мой ИОС код на стороне

 func uploadImage(image: UIImage, completionHandler: @escaping (String) ->()){ 

    // Now use image to create into NSData format 
      let imageData:NSData = UIImagePNGRepresentation(image)! as NSData 

      //convert the nsdata to base64 encoded string 

       let strBase64:String = imageData.base64EncodedString(options: .lineLength64Characters) 
    // prepare json data 
    let json: [String: Any] = ["image": strBase64] 

    let jsonData = try? JSONSerialization.data(withJSONObject: json) 

    // create post request 
    let url = URL(string: "http://10.10.10.72/Test/api/UploadPhoto.php")! 
    var request = URLRequest(url: url) 
    request.httpMethod = "POST" 

    // insert json data to the request 
    request.httpBody = jsonData 

    let task = URLSession.shared.dataTask(with: request) { data, response, error in 

     do { 
      guard let data = data else { 
       throw JSONError.NoData 
      } 
      guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: AnyObject] else { 
       throw JSONError.ConversionFailed 
      } 

      completionHandler(json["sign"] as! String) 

     } catch let error as JSONError { 
      print(error.rawValue) 
     } catch let error as NSError { 
      print(error.debugDescription) 
     } 

     } 
    task.resume() 
} 

я использовал словарю хранить свои данные, и превратили его в формат JSON данных для отправки на сервер

 let json: [String: Any] = ["image": strBase64] 
    let jsonData = try? JSONSerialization.data(withJSONObject: json) 

Тогда на стороне PHP, я извлечь его с помощью

$entityBody = file_get_contents('php://input'); 

, то я декодируется из JSON который произвел мне массив и я могу получить доступ к стоимости путем ссылки на изображение, так что полный PHP стороне кода, как показано ниже:

<?php 
//get the posted json data 
$entityBody = file_get_contents('php://input'); 
//decode the json data 
$decoded = json_decode($entityBody, TRUE); 
$imageString = $decoded["image"]; 
//create a unique name for the image 
$filename_path = md5(time().uniqid()).".png"; 
//converted the image string back to image 
$data = base64_decode($imageString); 
//put it on the desired location 
file_put_contents('../AllImages/uploads/signature/'.$filename_path, $data); 
$response = array(); 
//create the response 
$response['sign'] = '../AllImages/uploads/signature/'.$filename_path; 
echo json_encode($response); 
?> 

сделать примечание здесь, я кодировать данные JSON снова быть отправлен обратно как ответ от php на мою сторону ios, и вам нужно декодировать ответ от json, поэтому полная идея заключается в том, что вы кодируете значение json с одной стороны, вам нужно декодировать его с другой стороны для доступа к значению правильно, исправьте меня, если я ошибаюсь, я рад, что мое приложение работает со всеми запросами сейчас: D

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