0

このチュートリアルに大きく基づいたRESTサービスを作成しました。また、このチュートリアルに大きく基づいたRESTリクエストライブラリを作成しました。(基本的に、たくさんのswitch$_SERVER['REQUEST_METHOD']。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);  
}

2つの単純なHTMLフォームがあります。1つはgetメソッドを使用し、もう1つはpostメソッドを使用します。単純な入力テキストでそれらの1つを使用すると、正常に動作します。サービスの値を問題なく取得/返します。

ただし、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";

出力:file EXISTS、is_uploaded_file FALSE、NOT move_uploaded_fileこれは、ファイルが実際にはサービスに存在しているが、アップロードされたファイルがfalseを返すことを意味します。おそらく、サービスで空の$_FILES配列の代わりにPOST配列を使用しているためです。 .....。

4

2 に答える 2

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); 
}

ありがとう。デイブ

于 2012-04-10T14:08:25.747 に答える
0

POSTのエンコーディングタイプを確認してください。フォームでは「multipart/form-data」である必要があるため、ファイルのアップロードが正しく機能するには、POSTREST呼び出しに同様のエンコードタイプが必要であると想定しています。

于 2012-04-06T18:36:23.217 に答える