2014-08-28 3 views
0

Я пытаюсь создать REST API в PHP. Мой API должен иметь возможность загружать файлы и получать информацию о пользователе через метод $ _POST. Любой орган, который может помочь мне создать REST API, а также поможет мне выяснить, какие компоненты мне нужны для создания API.Как создать rest api для загрузки файла php

<?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- to-write-a-rest-api) – tom

ответ

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 будет обрабатывать множество файлов в больших объемах трафика. Загрузка файла на плаз и привязка к судьбе будет лучше @ rubin-porwel – ilhnctn

Смежные вопросы