2016-05-27 8 views
1

base64文字列に変換された画像を受け取るAPIがあります。私たちのモバイルアプリケーションは、変換プロセス(base64)中に多すぎるRAMを消費するため、マルチパートとしてイメージをアップロードする必要があります。私はモバイル部分を開発しましたが、私はPHP APIに悩まされています。ボレーはマルチパートアップロードをサポートしていなかったので、ボレーからレトロフィットに切り替えました。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

私はアップロードの写真のためのカスタムメソッド[here](http://stackoverflow.com/questions/36513174/android-multipart-image-upload-with-httpconnectionparams-deprecated-in-new-api/36513504#36513504)を持っています。それはJsonによって働くことが多分あなたを助けるかもしれません。 –

+0

スクリプトからデータベースコードを削除してください。それはイメージを受け取ることとは何の関係もありません。受信に集中する。スクリプトを小さくしてください。 – greenapps

答えて

0

はPHPと$_FILES配列のmove_uploaded_file()機能を見てください。

このサイトのサンプルコードは豊富です。

0

あなたがバックエンドでマルチパートアップロードを追加したい場合は、次の変更を行う必要があります:マルチパート/フォームデータ:(それはヘッダのContent-Typeを持っている必要がありますが、マルチパート形式でPOSTリクエストを使用して海岸を行い、また、

<?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 
    )); 
} 

を正しいフォーマットのbi - https://ru.wikipedia.org/wiki/Multipart/form-data)。それがあなたを助けることを願っています

関連する問題