CI:图像上传到文件夹不起作用

时间:2011-07-22 21:03:54

标签: image codeigniter upload

在尝试使用上传库时,我很难确定我做错了什么/如何排除故障。我有一个包含多个字段(主要是文本)的表单,其中包含一个图像上载字段。输入到文本字段的数据已正确填充到我的数据库中,但用户浏览要上载的图像文件未显示在我在根目录下创建的文件夹中,其权限允许将其写入。非常感谢所有帮助。谢谢!

以下部分视图:

<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 :(得分:0)

你的目标路径可能需要一个尾部斜杠,试试这个:

$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

答案 1 :(得分:0)

在将控制器发送到您的模型之前,您应首先在控制器中进行验证......很快,将上传过程放入您的控制器功能中,然后在成功之后,您可以将后期数据发送到您的模型中。

相关问题