【问题标题】:how to creating rest api for php file uploading如何为php文件上传创建rest api
【发布时间】:2014-08-28 11:59:55
【问题描述】:

我正在尝试用 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]

【问题讨论】:

标签: php rest


【解决方案1】:

对于使用 REST api 上传图像,最优选的方法是在 post 请求中传递 base64 编码的图像数据,然后使用将 base64 编码字符串解码后的内容放入文件中

file_put_contents()

功能

请参考示例代码sn-p

例如

$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);

【讨论】:

  • base64 不是一个好选择,特别是如果 API 将在大量流量下处理大量文件.. 将文件上传到 plase 并链接到目标会更好@rubin -porwel
猜你喜欢
  • 1970-01-01
  • 2016-08-27
  • 2013-04-30
  • 2013-01-21
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
相关资源
最近更新 更多