REST Webservice HTTP_PUT параметр - PullRequest
       21

REST Webservice HTTP_PUT параметр

0 голосов
/ 02 февраля 2012

Я делаю с помощью tonic (php-библиотека для отдыха) веб-сервис отдыха.

Я использую в соответствии с CRUD и REST для редактирования элемента.

Поэтому я называю свой метод с рисункоми filetype, и анализируем параметры, и сохраняем файл с кодировкой 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;
}

Проблема: сохраненное изображение не похоже на исходное, оно не может бытьотображается как изображение

Я использую http://www.redio.info/werkzeuge/file2base64.html, чтобы преобразовать мою картинку в base64.Я думаю, что проблема может быть в разборе в начале моего кода.

Оригинал: 13,872 байт

Новое изображение: 14,313 байт

1 Ответ

1 голос
/ 02 февраля 2012

Ваш параметр изображения, вероятно, получает urlencoded, что объясняет больший размер файла.(например, от '/' до% 2F)

Попробуйте поместить код параметра вокруг параметра перед его декодированием.

$bin = base64_decode(urldecode($para['picture']));
...