2012-02-01 5 views
0

토닉 (나머지는 PHP 라이브러리)으로 나머지 웹 서비스를 만듭니다.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; 
} 

문제 : 저장된 사진은 내가 64 기수로 내 사진을 변환 할 수 http://www.redio.info/werkzeuge/file2base64.html을 사용하여이 이미지

로 표시 할 수 없습니다 원래처럼되지 않습니다. 내 코드의 시작 부분에 문제가 파싱에있을 수 있다고 생각합니다.

원본 : 13.872 바이트

새로운 이미지 : 14.313 바이트

+0

원본과 다른가요? –

+0

내가 퀘스트를 업데이트했습니다. – user547995

+0

hexeditor (또는 텍스트 편집기)를 사용하여 두 파일을 살펴보고 명백한 차이점을 찾으십시오. –

답변

1

사진 매개 변수는 아마 urlencoded를 취득합니다 더 큰 파일 크기를 설명 할 것입니다. (예 : '/'에서 % 2F)

디코딩하기 전에 매개 변수 주위에 urldecode를 넣으십시오.

$bin = base64_decode(urldecode($para['picture'])); 
관련 문제