CI: загрузка изображения в папку не работает - PullRequest
0 голосов
/ 23 июля 2011

Мне сложно определить, что я делаю неправильно, и как устранить неполадки при попытке использовать библиотеку загрузки.У меня есть форма с несколькими полями (в основном текст), с одним полем загрузки изображения.Данные, введенные в текстовые поля, правильно заполнены в моей базе данных, но файл изображения, который пользователь просматривает для загрузки, не отображается в папке, которую я создаю в корне, его разрешения позволяют записывать в нее.Вся помощь очень ценится.Спасибо!

Частичное представление ниже:

<p>
               <label for="uEventFillByDateTime">Event Fill-by Date/Time:</label>
               <input type="text" id="uEventFillByDateTime" name="uEventFillByDateTime" />

           </p>
           <p>
               <label for="uEventImage">Event Image:</label>
                <?php echo form_open_multipart('upload/do_upload');?>
                <input type="file" name="uEventImage" size="20" id="uEventImage" />
           </p>

           <p>
               <label for="uEventKeywords">Event Keywords:</label>
               <textarea id="uEventKeywords" name="uEventKeywords"></textarea>
           </p>  

Вызов контроллера:

public function createEvent() {
                if( !empty( $_POST ) ) {
                    echo $this->event_model->createEvent();
                }
        }  

Код модели:

public function createEvent() {

            $this->image_path = realpath(APPPATH . 'event_images');

            $config = array(
            'allowed_types' => 'jpg|jpeg|gif|png',
            'upload_path' => $this->image_path,
            'max_size' => 2000,
            'max_width' => 212,
            'max_height' => 118
        );

            $this->load->library('upload', $config);
            $this->upload->do_upload();
            $image_data = $this->upload->data();

            /*format date time from string to mysql */
            $cdt = $this->input->post( 'cEventDateTime', true );
            $cdtMySQL = date("Y-m-d H:i:s", strtotime($cdt));
            /*format fill-by date time from string to mysql */
            $cfdt = $this->input->post( 'cEventFillByDateTime', true );
            $cfdtMySQL = date("Y-m-d H:i:s", strtotime($cfdt));

            $data = array(
                'event_name'  => $this->input->post( 'cEventName', true ),
                'event_datetime' => $cdtMySQL,
                'event_fillbydatetime' => $cfdtMySQL,
                'event_keywords'  => $this->input->post( 'cEventKeywords', true ),
                'event_notes'  => $this->input->post( 'cEventNotes', true ),
                'event_featured'  => $this->input->post( 'cEventFeatured', true ),
                'fk_venue_id'  => $this->input->post( 'cEventVenue', true ),
                'fk_eventtype_id'  => $this->input->post( 'cEventType', true ),
                'fk_eventlifecycle_id'  => $this->input->post( 'cEventlifecycle', true ),
            );
            $this->db->insert( 'event', $data );
            return $this->db->insert_id();
        }  

Ответы [ 2 ]

0 голосов
/ 23 июля 2011

Сначала вы должны выполнить проверку в вашем контроллере, прежде чем отправлять его в вашу модель ... Коротко, поместите процесс загрузки в функцию вашего контроллера, затем, после успеха, вы можете отправить данные поста в вашу модель.

0 голосов
/ 23 июля 2011

Ваш конечный путь, вероятно, нуждается в завершающем слэше, попробуйте это:

$this->image_path = realpath(APPPATH . 'event_images/');

Попробуйте поиграть с путем, из руководства:

upload_path : Путь к папке, в которую следует поместить загрузку. Папка должна быть доступной для записи, а путь может быть абсолютным или относительным.

Как правило, никогда не предполагает успеха .
Вы также можете получить сообщения об ошибках после запуска do_upload(), например, так:

$this->upload->display_errors();

Это должно помочь вам устранить ошибку или, по крайней мере, выяснить, почему CI не загружает изображение.

Другие вещи, которые стоит попробовать:

  • Попробуйте запустить var_dump(is_dir($path)) в пути загрузки и посмотрите, что говорит php.
  • Попробуйте исключить использование realpath().
  • Попробуйте ./path/like/this, как показано в примере на странице документов.

Еще одно примечание : Вы действительно не должны загружать что-либо непосредственно в свое приложение или системный каталог, и любые файлы там не должны быть доступны напрямую через http. Это обычная практика, и, вероятно, целесообразно создавать отдельный каталог /uploads.

Если ничего не помогло, еще раз прочитайте документы, если вы что-то пропустили:
http://codeigniter.com/user_guide/libraries/file_uploading.html

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