Nano Hash - криптовалюты, майнинг, программирование

CI: загрузка изображения в папку не работает

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

Частичный вид ниже:

<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();
        }  
22.07.2011

Ответы:


1

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

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

Попробуйте поиграться с путем из мануала:

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

Как правило, никогда не предполагайте успех.
Вы также можете получить сообщения об ошибках после запуска 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

22.07.2011

2

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

23.07.2011
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..