2012-04-05 4 views
0

크게 this tutorial을 기반으로하는 REST 서비스를 만들었습니다. 나는 또한 this tutorial을 기반으로하는 REST 요청 라이브러리를 만들었습니다. (기본적으로 $_SERVER['REQUEST_METHOD']switch 묶음). API는 또한 cURL로 요청을합니다.

protected function executePost ($ch) 
{ 
    if (!is_string($this->requestBody)) 
    { 
     $this->buildPostBody(); 
    } 

    curl_setopt($ch, CURLOPT_POSTFIELDS, $this->requestBody); 
    curl_setopt($ch, CURLOPT_POST, 1); 

    $this->doExecute($ch); 
} 

protected function doExecute (&$curlHandle) 
{ 
    $this->setCurlOpts($curlHandle); 
    $this->responseBody = curl_exec($curlHandle); 
    $this->responseInfo = curl_getinfo($curlHandle); 

    curl_close($curlHandle); 
} 

나는 두 가지 간단한 HTML 양식을 가지고 있는데, 하나는 get 메소드와 하나는 post 메소드에 대한 것입니다. 간단한 입력 텍스트와 함께 그 중 하나를 사용할 때 잘 작동합니다. 나는 아무런 문제없이 서비스의 값을 얻거나 리턴한다.

하지만 HTML 양식에서 이미지를 보내고 서비스에서 수신 한 다음 서버에 저장해야합니다.

여기 점심 식사를 서비스에 제공하는 부분입니다. 내 서비스에서

print_r($_FILES); 
//move_uploaded_file($_FILES["image1"]["tmp_name"], "Images/" . $_FILES["image1"]["name"]); when uncommented, This line actually works and save the image in my folder. 

include("RestUtils.php"); 

$request = new RestRequestOperator('http://localhost:8080/REST/RestControler.php/user/1', 'POST', $_FILES); 
$request->execute(); 

, 나는 tmp_name와 이름있는 이미지 정보를 정기적으로받을. move_uploaded_file (및 올바른 매개 변수를 사용하여 이미지를 저장하려고 시도하면 작동하지 않습니다.)

'짧은 시간 동안'이미지 파일을 저장하면 거기에 어떤 종류의 마법이 있다는 것을 알고 있습니다. . 난 내 서비스를 호출 할 때 TMP 폴더는 이미지가 이미 제거

감싸 :?. 나는 PHP의 REST API에 이미지를 보낼 수 궁금해하고 자신의 서버에 저장

편집을 : 서비스에 추가했습니다.

if(file_exists($_POST["image1"]["tmp_name"])){ 
    echo "file EXISTS<br>"; 
}else echo "NOPE.<br>"; 

if(is_uploaded_file($_POST["image1"]["tmp_name"])){ 
    echo "is_uploaded_file TRUE<br>"; 
}else echo "is_uploaded_file FALSE<br> ."; 

if(move_uploaded_file($_POST["image1"]["tmp_name"], "Images/" .$_POST["image1"]["name"])){ 
    echo "move_uploaded_file SUCCESS "; 
}else echo "NOT move_uploaded_file"; 

출력 s : file EXISTS, is_uploaded_file FALSE, NOT move_uploaded_file 파일이 실제로 서비스에 존재하지만 업로드 된 파일은 falses를 반환합니다. 아마도 $ _FILES 배열 대신 서비스에서 POST 배열을 사용합니다. 이는 비어 있습니다. 서비스 .......

답변

1

발견, 로컬 wamp PHP 5.3.4에서 작동!

public static function processRequest() 
{ 
    case 'post': 
     if(move_uploaded_file($_FILES["uploaded_file"]["tmp_name"] , "Images/" . $_FILES["uploaded_file"]["name"])){ 
        echo "move_uploaded_file SUCCESS "; 
    ......................................     
} 
......................................   
protected function executePost ($ch) 
{ 
    $tmpfile = $_FILES['image1']['tmp_name']; 
    $filename = basename($_FILES['image1']['name']); 

    $data = array(
     'uploaded_file' => '@' . $tmpfile . ';filename='.$filename, 
    ); 
    curl_setopt($ch, CURLOPT_POST, 1);    
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    //no need httpheaders 
    $this->doExecute($ch); 
} 

감사합니다. Dave

0

POST의 인코딩 유형을 확인하십시오. 폼에서는 "multipart/form-data"가 필요하므로 POST REST 호출이 파일 업로드가 올바르게 작동하는 것과 비슷한 인코딩 유형이 필요하다고 가정합니다.

관련 문제