PDA

View Full Version : حرفه ای: وب سرویس rest و مشکل ارسال فایل



captain_hamid
پنج شنبه 30 بهمن 1393, 13:04 عصر
سلام
برنامه ای که نوشتم ارتباط با سرورش بر اساس restful هست.
حالا یه مشکلی دارم با upload فایل. برای این روش باید چه کاری انجام داد؟
ممنون

amin1softco
پنج شنبه 30 بهمن 1393, 14:04 عصر
هیچی با با curl بسته به متدی که هست برای آپلود فایل اقدام کنی
1- خواندن فایل در یک متغیر مانند $file
2- فراخوانی آدرس وبسرویس با پارامتر لازم برای آپلود فایل که با curl انجام می شه
3- دریافت نتیجه و عمل بر اساس آن

کد زیر برگرفته روی نت بود :

function CallAPI($method, $url, $data = false)
{
$curl = curl_init();

switch ($method)
{
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);

if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_PUT, 1);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}

// Optional Authentication:
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password");

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($curl);

curl_close($curl);

return $result;
}

bagherok
پنج شنبه 30 بهمن 1393, 20:14 عصر
اگه سمت سرور
از سرویس دهنده دیگه استفاده میکنید باید به داکیومنت هاش مراجعه کنید.
ولی اگه خودتون نوشتید
یه مثال ساده


// Client
// With Local Url File =======================================
$filePath = realpath('5.jpg');
$fileName = 'file';
$url = 'http://localhost/api/files';
$header = array('Content-Type: multipart/form-data');
$data = array('name' => $fileName, 'file' => "@$filePath",);

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);
echo '<pre>'.print_r($result,true).'</pre>';


//Client
// With Submit File =======================================
$filePath = $_FILES['file']['tmp_name'];
$fileName = $_FILES['file']['name'];
$url = 'http://localhost/api/files';
$header = array('Content-Type: multipart/form-data');
$data = array('name' => $fileName, 'file' => "@$filePath");

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = json_decode(curl_exec($ch),true);
curl_close($ch);
echo '<pre>'.print_r($result,true).'</pre>';