12

Is there a way to upload a file from a client side to the server using REST using PHP,

I am trying to use the below code, and it is not working from me.

<?php $file_to_upload = array('file_contents'=>'@c:\\test.txt'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://localhost/api/upload.php'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSER, TRUE); curl_setopt($ch, CURLOPT_UPLOAD, TRUE); curl_setopt($ch, CURLOPT_POST,TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $file_to_upload); curl_exec($ch) or die( curl_error($ch) ); $error = curl_error($ch); curl_close ($ch); echo " Server response: ".$result; echo " Curl Error: ".$error; ?> 

and my upload.php

$uploaddir = realpath('./') . '/'; $uploadfile = $uploaddir . basename($_POST['file']['name']); echo $uploadfile; echo "\n"; echo '<pre>'; echo $_POST['file']['tmp_name']; if (move_uploaded_file($_POST['file']['tmp_name'], $uploadfile)) { echo "File is valid, and was successfully uploaded.\n"; } else { echo "Possible file upload attack!\n"; } echo 'Here is some more debugging info:'; print_r($_FILES); echo "\n<hr />\n"; print_r($_POST); print "</pr" . "e>\n"; ?> 
1
  • 5
    I think you should be looking for $_FILES['file_contents'] and not $_POST['file']. Commented Apr 2, 2013 at 23:14

3 Answers 3

9

I think you should be looking for $_FILES['file_contents'] and not $_POST['file']. – user1190992

Sign up to request clarification or add additional context in comments.

Comments

8

Try this.

index.php

<?php echo "<pre>"; print_r($_FILES); error_reporting(9); if($_REQUEST['action'] == 'submit') { $ch = curl_init(); $filePath = $_FILES['file_upl']['tmp_name']; $fileName = $_FILES['file_upl']['name']; $data = array('name' => 'Foo', 'file' => "@$filePath", 'fileName' =>$fileName); curl_setopt($ch, CURLOPT_URL, 'http://www.restServiceHost.com/file3/upload.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_exec($ch); curl_close($ch); } ?> <form name="file_up" action="" method="POST" enctype="multipart/form-data"> Upload your file here <input type="file" name="file_upl" id="file_upl"/> <input type="submit" name="action" value="submit"/> </form> 

and upload.php in http://www.restServiceHost.com/file3

<?php echo "<pre>"; echo 'in upload.php<br/>'; print_r($_FILES); print_r($_REQUEST); move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_REQUEST["fileName"]); ?> 

Comments

4

php5.5+

$filePath = $_FILES['file_upl']['tmp_name']; $type=$_FILES['file_upl']['type']; $fileName = $_FILES['file_upl']['name']; $data = array('file_upl' => curl_file_create($filePath, $type, $fileName)); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://localhost/api/upload.php'); curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: multipart/form-data')); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $response = curl_exec($ch); curl_close($ch); 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.