“上传路径似乎无效”。Codeigniter文件上传不起作用。

26

我已经卡在这一点很长时间了,即使阅读了许多帖子,我也没有能够找到解决方法。

我正在制作一个测验的界面,在管理界面中,我需要上传图像到文件夹并将图像名称上传到数据库。 我可以处理其他事情,但是长期以来图片上传一直困扰着我。

请查看下面的代码。

表格

<?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();
?>

我曾尝试运行一个JavaScript来获取上传框中的文件名,并且它确实返回了文件名。

控制器

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'));,但这也返回了相同的错误。

我不知道我做错了什么。

更新

我的目录结构是

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

我正在使用Windows机器并且使用WAMP,这是否有区别?


你尝试过将上传文件夹放在应用程序和公共文件夹中吗? - Dau
@Hemant 把上传文件夹放在应用程序中会使其在逻辑上无法访问。是的,我已经尝试将其放在公共目录中,但没有成功。 - Aniket
1
尝试从 $config['upload_path'] 中移除 base_url() - Eugine Joseph
3个回答

63

我正在自动加载库,但当我尝试通过 $this->load->library('upload', $config); 来初始化配置时,它无法执行。

相反,我把我的配置文件放在了 config/upload.php 中。

另一种方法是 $this->upload->initialize($config);


1
哇嘿,将我的配置移动到config/upload.php中解决了我的问题! - Jeemusu
1
通过以下方式解决了相同的问题:$this->upload->initialize($config); - viv
@ViperTecPro 你好,我遇到了相同的错误,尝试了那个解决方案但没有用。 - suresh
也遇到了同样的问题,解决方法是:$this->upload->initialize($config); - John Lopez
那解决了我的问题。 - FABBRj
显示剩余2条评论

9

好的,请将您的上传文件夹放置在原始位置,就像您在问题中展示的那样,并尝试使用以下内容(为您的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);
}

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


try adding the file field name


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

这并没有产生影响,因为错误指出的是上传路径而不是字段。 - Aniket
打开config/constants.php文件 定义('UPLOADS',APPPATH. 'uploads/'); $config ['upload_path'] = UPLOADS; - Philip
不,@Philip,我尝试过了,在CI3中不起作用。 - Deepak Keynes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接