2016-05-27 2 views
1

У нас есть API, который принимает изображения, преобразованные в строку base64. Наше мобильное приложение потребляет слишком много ОЗУ во время процесса конверсии (до base64), теперь нам нужно загрузить изображение как multipart. Я разработал мобильную часть, но я застрял в PHP API. Мы переключились с volley на Retrofit, потому что волейбол не поддерживал многостраничную загрузку.Как получить многостраничный запрос в PHP

Что мне нужно изменить в скрипте, который получает многостраничную загрузку изображения?

<?php 

//header('Content-Type : bitmap; charset=utf-8'); 
//header('Content-Type: application/json'); 

if (isset($_POST["encoded_string"])) { 

    //encoded_string -> base64 string sent from mobile phone 

    $encoded_string = $_POST["encoded_string"]; 
    $image_name  = $_POST["image_name"]; 

    $decoded_string = base64_decode($encoded_string); 

    $path = 'images/' . $image_name; 

    if (!file_exists('images')) { 
     mkdir('images', 0777, true); 
    } 

    $file = fopen($path, 'wb'); 

    $is_written = fwrite($file, $decoded_string); 
    fclose($file); 

    if ($is_written > 0) { 

     $connection = mysqli_connect('localhost', 'root', '', 'test'); 

     if ($connection) { 

      $query = "INSERT INTO photos(name,path) values('$image_name','$path');"; 

      $result = mysqli_query($connection, $query); 

      if ($result) { 
       echo json_encode(array(
        "response" => "Success! Image is succefully uploaded!.",  
        "result" => "success" 
       )); 
      } else { 
       echo json_encode(array(
        "response" => "Error! Image is not uploaded.", 
        "result" => "error" 
       )); 
      } 
      mysqli_close($connection); 
     } else { 
      echo json_encode(array(
       "response" => "Error! No database connection!", 
       "result" => "error" 
      )); 
     } 
    } 
} else { 
    echo json_encode(array(
     "response" => "Error! Please insert data!", 
     "result" => "error" 
    )); 
} 
?> 
+0

У меня есть пользовательские методы [здесь] (http://stackoverflow.com/questions/36513174/android-multipart-image-upload-with-httpconnectionparams-deprecated-in-new-api/36513504#36513504) для загрузки фото это работает Json, возможно, поможет вам. –

+0

Удалите код базы данных из своего сценария. Это не имеет никакого отношения к получению изображения. Сосредоточьтесь на получении. Держите скрипт маленьким. – greenapps

ответ

0

Посмотрите move_uploaded_file() функции PHP и $_FILES массив.

Пример кода на этом сайте.

0

Если вы хотите добавить многослойную загрузку в интерфейсе вы должны сделать следующие изменения:

<?php 

//header('Content-Type : bitmap; charset=utf-8'); 
//header('Content-Type: application/json'); 


if (isset($_POST["encoded_string"])) { 


    //encoded_string -> base64 string sent from mobile phone 
    if (!file_exists('images')) { 
     mkdir('images', 0777, true); 
    } 

    $connection = mysqli_connect('localhost', 'root', '', 'test'); 

    if (!$connection) { 
     echo json_encode(array(
      "response" => "Error! No database connection!", 
      "result" => "error" 
     )); 
     die; 
    } 

    $responses = array(); 

    foreach ($_FILES["pictures"]["error"] as $key => $error) { 
     if ($error == UPLOAD_ERR_OK) { 
      $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; 
      $image_name = $_FILES["pictures"]["name"][$key]; 
      $path = 'images/' . $image_name; 
      if (move_uploaded_file($tmp_name, path)) { 
       $query = "INSERT INTO photos(name,path) values('$image_name','$path');"; 
       $result = mysqli_query($connection, $query); 
       if ($result) { 
        $responses[] = array(
         "response" => "Success! Image is succefully uploaded!.", 
         "result" => "success" 
        ); 
       } else { 
        $responses[] = array(
         "response" => "Error! Image is not uploaded.", 
         "result" => "error" 
        ); 
       } 
      } 
     } else { 
      $responses[] = array(
       "response" => "Error! Please insert data!", 
       "result" => "error" 
      ); 
     } 
    } 
    mysqli_close($connection); 
    echo json_encode(array(
     'responses' => $responses 
    )); 
} 

Кроме того, сделать берег использовать почтовый запрос с многочастным форматом (он должен иметь заголовок Content-Type: многочастному/формы-данные и bi в правильном формате - https://ru.wikipedia.org/wiki/Multipart/form-data). Надеюсь, это поможет вам.

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