如何为php文件上传创建rest api

时间:2014-08-28 11:59:56

标签: php rest

我试图在PHP中构建REST API。我的API需要能够通过$ _POST方法上传文件并获取用户信息。任何可以帮助我创建REST API的机构,还可以帮助我找出创建API所需的组件。

<?php

 header("content-type:application/json");
 $userid=$_POST['user_id'];
 $email=$_POST['email'];
 $fname=$_POST['firstname'];
 $lname=$_POST['lastname'];

 // include db connect class
    require_once __DIR__ . '/db_connect.php';

    // connecting to db
    $db = new DB_CONNECT();
 //$result=mysql_query("select * form user");
 $sql="UPDATE user SET email='$email',fname='$fname',lname='$lname' WHERE userid='$userid'";
 $result = mysql_query($sql);
 if ($result) {
        // successfully inserted into database
        $response["code"] = 1;
        $response["message"] = "successfully updated";

        // echoing JSON response
        echo json_encode($response);
    } else {
        // failed to insert row
        $response["code"] = 2;
        $response["message"] = "Oops! failed to insert data";

        // echoing JSON response
        echo json_encode($response);
    }

 //file uploading 
 if (empty($_FILES) || $_FILES['file']['error']) {
  //die('{"OK": 0, "info": "Failed to move uploaded file."}');
  $response["code"] = 2;
  $response["message"] = "Oops! An File uploading error occurred.";
  echo json_encode($response);
}

$chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
$chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0;

$fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : $_FILES["file"]["name"];
$filePath = "uploads/$fileName";


// Open temp file
$out = @fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab");

if ($out) {
  // Read binary input stream and append it to temp file
  $in = @fopen($_FILES['file']['tmp_name'], "rb");

  if ($in) {
    while ($buff = fread($in, 4096))
          fwrite($out, $buff);
       //print($out);
     // echo sizeof($out);
  } else
  //  die('{"OK": 0, "info": "Failed to open input stream."}');
 $response["code"] = 2;
 $response["message"] = "Oops!  Failed to open input Stream error occurred.";
 echo json_encode($response);
  @fclose($in);

  @fclose($out);

  @unlink($_FILES['file']['tmp_name']);
} else{
//  die('{"OK": 0, "info": "Failed to open output stream."}');
 $response["code"] = 2;
        $response["message"] = "Oops! Failed to open output error occurred.";
        echo json_encode($response);
 }

// Check if file has been uploaded
if (!$chunks || $chunk == $chunks - 1) {
  // Strip the temp .part suffix off
  rename("{$filePath}.part", $filePath);
}


//die('{"OK": 1, "info": "Upload successful."}');
 $response["code"] = 0;
    $response["userid"]=$_POST['user_id'];
    $response["email"]=$_POST['email'];
    $response["firstname"]=$_POST['firstname'];
    $response["lastname"]=$_POST['lastname'];
    //$resopnse["file"]=$_POST['file'];
    $response["message"] = "Required field(s) is missing";

    // echoing JSON response
    echo json_encode($response);

?>

这是我的.htaccess代码

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ %{ENV:BASE} index.php [QSA,L]

1 个答案:

答案 0 :(得分:2)

使用REST api上传图像最好的方法是在post请求中传递base64编码的图像数据,然后使用

将base64编码的字符串解码后放入文件中
  

file_put_contents()

功能

请参阅示例代码段

E.g

$img_data=$_POST['image'];

$img_info=explode(',',$img_data);

$image_content=base64_decode($img_info[1]);

$img_extension=substr($img_info[0],11,3);

$img_filename=$_SERVER['DOCUMENT_ROOT'].'/images/img_'.time().'.'.$img_extension;

file_put_contents($img_filename,$image_content);