Codeigniter и RestServer. Как загрузить изображения? - PullRequest
8 голосов
/ 16 августа 2011

Я кодирую API, используя Phils RestServer (см. Ссылку) в Codeigniter.Мне нужен способ загрузки изображений через API.Как я могу это сделать?Это так же просто, как сделать запрос POST с правильными заголовками (какие заголовки использовать)?

https://github.com/philsturgeon/codeigniter-restserver

Благодарен за весь ввод!

Ответы [ 5 ]

12 голосов
/ 13 сентября 2013

Хорошо,

Здесь есть другое решение: Загрузка файла с клиента отдыха на сервер отдыха

Но ни одно из этих решений не помогло мне.

Однако это то, что сработало;на самом деле работал.

Во-первых, я не был уверен, достиг ли мой файл метода, поэтому я изменил строку ответа на:

function enter_post()
    {

        $this->response($_FILES);
    }

Обратите внимание, это отличный способ проверитьваши методы REST.

Вы также можете вывести:

$ this-> response ($ _ SERVER);

и

$ this-> response ($ _ POST);

и т. Д.

Я получил следующий вывод JSON:

{"file": { "имя": "camel.jpg", "тип": "приложения / октет-поток", "tmp_name": "/ TMP / phpVy8ple", "ошибка": 0, "размер": 102838}}

Итак, я знал, что мой файл там.

Затем я изменил метод, чтобы найти и переместить файл.Я использовал общий сценарий доступа к файлу, чтобы получить файл из его временного местоположения и переместить его в другое место:

    $uploaddir = '/home/me/public_html/uploads/';

    $uploadfile = $uploaddir . basename($_FILES['file']['name']);

    if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
        $data['status'] = 'uploaded';       
            } else {
        $data['status'] =  'failed';        
             }
5 голосов
/ 22 июня 2012

На самом деле вы можете использовать родной Класс загрузки файлов CodeIgniter , чтобы упростить загрузку с помощью Rest-Server Фила , например:

/**
 * REST API Upload using native CI Upload class.
 * @param userfile - multipart/form-data file
 * @param submit - must be non-null value.
 * @return upload data array || error string
 */
function upload_post(){
    if( ! $this->post('submit')) {
        $this->response(NULL, 400);
    }
    $this->load->library('upload');

    if ( ! $this->upload->do_upload() ) {
        $this->response(array('error' => strip_tags($this->upload->display_errors())), 404);
    } else {
        $upload = $this->upload->data();
        $this->response($upload, 200);
    }
}
2 голосов
/ 13 января 2016

Попробуйте этот код, изображение будет сохранено с отметкой времени и его расширением.

$uploaddir = 'uploads/';
    $path = $_FILES['image_param']['name'];
    $ext = pathinfo($path, PATHINFO_EXTENSION);
    $user_img = time() . rand() . '.' . $ext;
    $uploadfile = $uploaddir . $user_img;
    if ($_FILES["image_param"]["name"]) {
        if (move_uploaded_file($_FILES["image_param"]["tmp_name"],$uploadfile)) {
echo "success";
    }
0 голосов
/ 08 сентября 2017

Ниже приведена конфигурация пути к изображению и настройка соответствующих атрибутов в контроллере Form.php в функции form ()

    $config['upload_path']              = 'uploads/images/full';
    $config['allowed_types']            = 'gif|jpg|png';
    $config['max_width']                = '6000';
    $config['max_height']               = '6000';
    $config['encrypt_name']             = true;
    $this->load->library('upload', $config);
    $this->upload->initialize($config); 
    $uploaded               = $this->upload->do_upload($imgfile);
    if($uploaded)

{$ filenames = $ this-> fullimage_upload1 ($ this-> upload->данные ($ imgfile));вернуть $ filenames;}

Это функция, определяющая загрузку копии изображения в разные папки в виде маленьких функций миниатюр fullimage_upload1 ($ data) {$ this-> load-> library ('image_lib');

    //this is the larger image
    $config['image_library'] = 'gd2';
    $config['source_image'] = 'uploads/images/full/'.$data['file_name'];
    $config['new_image']    = 'uploads/images/small/'.$data['file_name'];
    $config['maintain_ratio'] = TRUE;
    /*$config['width'] = 600;
    $config['height'] = 500;*/
    $this->image_lib->initialize($config);
    $this->image_lib->resize();
    $this->image_lib->clear();

    //cropped thumbnail
    $config['image_library'] = 'gd2';
    $config['source_image'] = 'uploads/images/full/'.$data['file_name'];
    $config['new_image']    = 'uploads/images/thumbnails/'.$data['file_name'];
    $config['maintain_ratio'] = TRUE;
    $config['width'] = 300;
    $config['height'] = 258;
    $this->image_lib->initialize($config);  
    $this->image_lib->resize(); 
    $this->image_lib->clear();

    return $data['file_name'];
}
0 голосов
/ 16 августа 2011

Рассматривая, как amazon s3 делает это здесь http://www.anyexample.com/programming/php/uploading_files_to_amazon_s3_with_rest_api.xml

Похоже, на стороне клиента вы определяете тип файла, затем загружаете его в переменную с помощью file_get_contents($file_path) и затем отправляете его ссоответствующие заголовки, определенные в примере.

Тогда на сервере я предполагаю, что он будет использовать file_put_contents() с телом запроса для сохранения файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...