2012-02-01 11 views
0

私はtonic(休憩のためのPHPライブラリ)で休憩Webサービスを作っています。REST Webservice HTTP_PUTパラメータ

要素を編集するためにCRUDとRESTに従って使用します。

私は画像とファイルタイプで私のメソッドを呼び出し、paramtersを解析し、私のサーバー上でbase64でエンコードされたファイルを保存します。

コード:

function put($request) { 

    $response = new Response($request); 
    $msg = new ErrorMessage(); 
    $dbmodel = new DBModel(); 
    $arr = array('Data' => null,'Message' =>null,'Code' => null); 
    try{ 
     $split = explode ('&',$request->data); 
     $para = array(); 

     foreach($split as $i) { 
      $names = explode('=',$i); 
      if(!isset($names[0]) or !isset($names[1])) 
      { 
       throw new Exception(); 
      } 
      $para[$names[0]] = $names[1]; 
     } 
    } 
    catch(Exception $e) 
    { 
     $arr['Code'] = 400; 
     $arr['Message'] = $msg->getMessage(400); 
     $response->body = json_encode($arr); 
     return $response; 
    } 


    if (isset($para['picture']) or isset($para['filetype'])) 
    { 
     if (isset($para['picture']) and isset($para['filetype'])) 
     { 
      if (!($para['filetype'] == 'jpg' || $para['filetype'] == 'png')) 
      { 
       $arr['Code'] = 688; 
       $arr['Message'] = $msg->getMessage(617); 
       $response->body = json_encode($arr); 
       return $response; 
      } 
      $bin = base64_decode($para['picture']); 
      if (strlen($bin) >524288) 
      { 
       $arr['Code'] = 617; 
       $arr['Message'] = $msg->getMessage(617); 
       $response->body = json_encode($arr); 
       return $response; 
      } 

      $uid = $dbmodel->getUid($sid); 
      if($uid<1) 
      { 
       $arr['Code'] = 699; 
       $arr['Message'] = $msg->getMessage(699); 
       $response->body = json_encode($arr); 
       return $response; 

      } 
      $file = fopen($_SERVER['DOCUMENT_ROOT']."/img/".$uid.".".$para['filetype'], 'wb'); 
      fwrite($file, $bin); 
      fclose($file); 

     } 
     else 
     { 
      $arr['Code'] = 616; 
      $arr['Message'] = $msg->getMessage(616); 
      $response->body = json_encode($arr); 
      return $response; 
     } 

    } 

    $arr['Code'] = 200; 
    $arr['Message'] = $msg->getMessage(200); 
    $response->body = json_encode($arr); 
    return $response; 
} 

問題:保存された写真は、私がBASE64に私の写真を変換するhttp://www.redio.info/werkzeuge/file2base64.htmlを使用

画像

として、それを表示することができないオリジナルのもののようではありません。私は問題が私のコードの始めに解析することができると思う。

オリジナル:13.872バイト

新しいイメージ:14.313バイト

+0

元のようなものではありません...どのようにですか? –

+0

私のクエストを更新しました – user547995

+0

両方のファイルをヘキサエディタ(またはテキストエディタだけ)で見て、明らかな違いを探します。 –

答えて

1

あなたのピクチャパラメータは、おそらく大きなファイルサイズを説明するだろうという、URLエンコードされます。 (例: '/'から%2F)

デコードする前にパラメータの周囲にurldecodeを配置してください。

$bin = base64_decode(urldecode($para['picture'])); 
関連する問題