【问题标题】:CI: Image Upload to Folder Not WorkingCI:图像上传到文件夹不起作用
【发布时间】:2011-07-22 21:03:54
【问题描述】:

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

下面的部分视图:

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

【问题讨论】:

    标签: image codeigniter upload


    【解决方案1】:

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

    $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

    【讨论】:

      【解决方案2】:

      您应该先在您的控制器中进行验证,然后再将其发送到您的模型...不久,将上传过程放入您的控制器函数中,然后在成功后,您可以将发布数据发送到您的模型中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        • 2020-04-29
        • 2018-12-19
        • 1970-01-01
        • 2019-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多