我试图在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]
答案 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);