Msgstr "Путь загрузки не является допустимым". Загрузка файла Codeigniter не работает

Я застрял в этом месте в течение долгого времени и даже после прочтения нескольких сообщений, я не смог найти решение.

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

Пожалуйста, взгляните на мой код ниже.

Форма

<?php echo form_open_multipart('admin/update_question'); ?>
<?php echo form_hidden('questionid', $question->level); ?>
<?php echo form_label('Comment', 'comment'); ?>
<div class="input">
<?php
    $arr_comment = array(
        'name'  => 'comment',
        'id'    => 'comment',
        'value' => $question->comment
        );
        echo form_textarea($arr_comment);
?>
</div>
<br/>
<?php echo form_label('Answer', 'answer'); ?>
<div class="input">
<?php
    $arr_answer = array(
            'name'  => 'answer',
            'id'    => 'answer',
            'size'  => '10000',
            'value' => $question->answer
    );
    echo form_input($arr_answer);
?>
</div>
<br/>
<?php echo form_label('Image', 'userfile'); ?>
<div class="input">
<?php
    $arr_image = array(
        'name'  => 'userfile',
        'id'  => 'userfile',
        'value' => ''
    );
    echo form_upload($arr_image);
?>
</div>
<br/>
<?php
$arr_button = array(
    'name'  => 'submit',
    'value' => 'Update Question',
    'class' => 'btn primary large'
    );
?>
<div class="input">
<?php echo form_submit($arr_button); ?>
</div>
<br/>
<?php
echo form_close();
if ($error != '')
    echo '<div class="alert-message error">'. $error.' </div>';
echo validation_errors();
?>

Я попытался запустить js, который возвращает имя файла в поле для загрузки, и он возвращает его.

Контроллер

public function update_question() {
        $comment = $this->input->post('comment');
        $answer = $this->input->post('answer');

        echo var_dump(is_dir(base_url().'uploads/'));

        /*
         * Uploading image
         */
        $config['upload_path'] = base_url().'/uploads/';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_width'] = 0;
        $config['max_height'] = 0;
        $config['max_size'] = 0;
        $config['encrypt_name'] = TRUE;

        $this->load->library('upload', $config);
        if ( ! $this->upload->do_upload())
        {
                $error = array('error' => $this->upload->display_errors());
                print_r($error);
        }
        else
        {
                $arr_image = array('upload_data' => $this->upload->data());
                print_r($arr_image);
        }

        $questionid = $this->input->post('questionid');
        $question_data = array(
            'comment'   => $comment,
            'answer'    => $answer
        );
        $this->load->model('adminmodel', 'admin');
        $question_data = $this->admin->update_question_data($questionid, $question_data);
        //redirect('admin/questions', 'location');
}

Для моего пути загрузки я попробовал число или комбинации, и единственный, который вернул значение TRUE, был var_dump(is_dir('/wamp/www/quark_edorado/uploads'));, но это также возвращало ту же ошибку.

Я не знаю, где я ошибаюсь.

Update

Моя структура каталогов

/application/
/public/
    css/
    fonts/
    images/
    js/
/system/
/uploads/

Я работаю на Windows-машине и использую WAMP. Это имеет значение?

Ответы

Ответ 1

Выяснил идиотскую проблему.

Я был автозагрузкой библиотеки, и некоторые из них, когда я пытался инициализировать конфигурацию с помощью $this->load->library('upload', $config);, не сделал бы этого.

Вместо этого я помещал свои файлы конфигурации в config/upload.php

Другим способом для этого было бы $this->upload->initialize($config);

Ответ 2

Хорошо разместите свою папку для загрузки в исходном месте, как показано в вопросе, и попробуйте это (укажите относительный путь к вашему base_url)

$config['upload_path'] = 'uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_width'] = 0;
$config['max_height'] = 0;
$config['max_size'] = 0;
$config['encrypt_name'] = TRUE;

$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
        $error = array('error' => $this->upload->display_errors());
        print_r($error);
}
else
{
        $arr_image = array('upload_data' => $this->upload->data());
        print_r($arr_image);
}

Ответ 3

if ( ! $this->upload->do_upload())


try adding the file field name


if ( ! $this->upload->do_upload('userfile'))