2014-08-28 37 views
0

我想在PHP中構建一個REST API。我的API需要能夠通過$ _POST方法上傳文件並獲取用戶信息。任何可以幫助我創建REST API的機構,也可以幫助我找出創建API所需的組件。如何爲PHP文件上傳創建休息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] 
+0

可能重複【如何寫一個REST API?](http://stackoverflow.com/questions/4973156/how-寫一個rest-api) – tom 2014-08-28 12:09:29

回答

1

對於使用上傳圖像REST API最優選的方法是通過base64編碼圖像數據發佈請求,然後把內容串解碼base64編碼成文件後使用

file_put_contents()

功能

請參考示例代碼片段

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

'base64'不是一個好的選擇,特別是如果API將處理大量流量下的文件。上傳文件到plase並鏈接到destinotion將是更好@ rubin-porwel – ilhnctn 2016-05-06 13:21:55