图像上传到codeigniter中的特定文件夹

时间:2014-05-19 11:08:32

标签: image codeigniter upload

我一直在尝试将图片上传到特定文件夹我的情况是我已经上传了控制器,其中我有do_upload功能

   public function do_upload($field_name) {
        $field_name = 'image_title';
        $page_id = $this->input->post('page_id');
        $config = array(
            'allowed_types' => '*',
            'max_size' => '1024',
            'max_width' => '1024',
            'max_height' => '768',
            'upload_path' => './uploads/'. $page_id
        );
        $this->load->library('upload');
        $this->upload->initialize($config);
if (!is_dir('uploads'))
    {
        mkdir('./uploads/', 0777, true);
    }
$dir_exist = true; // flag for checking the directory exist or not
if (!is_dir('uploads/' . $page_id))
    {
        mkdir('./uploads/' . $page_id, 0777, true);
        $dir_exist = false; // dir not exist
    }
    else{
    }
        if (!$this->upload->do_upload($field_name)) {
            if(!$dir_exist)
          rmdir('./uploads/' . $page_id);
            $this->data['error'] = array('error' => $this->upload->display_errors());
        } else {

            $fInfo = $this->upload->data($field_name);
            $this->_createThumbnail($fInfo['file_name']);
            return $fInfo;
        }
 }
 /**********************************************************************************************/
    function _createThumbnail($filename)

    {

        $config['image_library']    = "gd2";      
        $config['source_image']     = "uploads/" .$filename;      
        $config['create_thumb']     = TRUE;      
        $config['maintain_ratio']   = TRUE;      
        $config['width'] = "80";      
        $config['height'] = "80";

        $this->load->library('image_lib',$config);

        if(!$this->image_lib->resize())

        {

            echo $this->image_lib->display_errors();

        } 

我的索引视图文件为

<section>
<?php echo validation_errors(); ?>
<?php //echo form_open_multipart('admin/upload/index/' . ((isset($page->id)) ? $page->id : '' ));   ?> 
<?php echo form_open_multipart('admin/upload/index/'); ?> 
<tr>
    <td><h3>Upload Images</h3></td>
</tr>
<table class="table table-striped">    
    <tr>
    <thead>
        <tr>
            <th>Image Name</th>
            <th>View</th>
            <th>Delete</th>
        </tr>
    </thead>
    <tbody>
        <?php if (count($images)): foreach ($images as $image): ?>
                <tr>
                    <td><?php echo anchor('admin/upload/index/' . $image->id, $image->image_title); ?></td>
                    <td><?php echo btn_edit('admin/upload/index/' . $image->id); ?></td>
                    <td><?php echo btn_delete('admin/upload/index/' . $image->id); ?></td>
                </tr>
            <?php endforeach; ?>
        <?php else: ?>
            <tr>
                <td colspan="3">There is no Image to display</td>
            </tr>
        <?php endif; ?>
        </tbody>
</table>
</section>
<section>
<table class="table table-striped">
    <tbody>
        <tr>
            <td><h5>Select Page</h5></td>
            <td><?php echo form_dropdown('page_id', $get_with_images, $this->input->post('page_id')); ?></td>

        </tr>
        <tr>
            <td><h5>Select Image</h5></td>
            <td>
                <?php echo form_upload('image_title', set_value('image_title', $image->image_title)); ?>
            </td> 
        </tr>
        <tr>
            <td><?php echo form_submit('submit', 'Upload', 'class="btn btn-success"'); ?></td>

        </tr>

</tbody>
</table>

<?php echo form_close(); ?>
</section>

下拉列表从页面控制器填充实际上我需要的是我想将图像上传到从下拉列表中选择的页面,例如,如果&#34;联系&#34;从下拉列表中选择页面我想将我的图像上传到&#34;联系&#34;页面和后端我想创建一个与我在下拉列表中选择的名称相同的目录,我希望&#34; uploads / home / abc.jpg&#34;和其他页面一样,请建议我将用我自己的

修改它的基本想法

1 个答案:

答案 0 :(得分:1)

您已将发布的pageid值作为帖子发送。在上传配置时使用它。

...
$config = array(
   ...
   'upload_path' => './upload/' . $this->input->post('page_id')
)

您需要首先检查目录是否存在,使用isdir() PHP函数,如果为false,mkdir(),还有PHP,文件夹名称和权限。

我不熟悉CodeIgniter,告诉你是否有某种方法可以获得<option>标签的书面价值,但我建议创建一个包含页面ID及其各自名称的数组,按帖子值查找数组的索引:

$page_name = [
   0 => 'contact',
   1 => 'home',
   2 => 'user',
   ...
]

...
$config = array(
   ...
   'upload_path' => './upload/' . $page_name[$this->input->post('page_id')]
)

编辑:用户在创建拇指方面存在问题

通过更新,您忘记更新缩略图的路径。所以你必须发送文件夹和文件名:

function _createThumbnail($folder, $filename)

{

    $config['image_library']    = "gd2";      
    $config['source_image']     = "./uploads/" $folder . "/" .$filename; 
    $config['create_thumb']     = TRUE;      
    $config['maintain_ratio']   = TRUE;      
    $config['width'] = "80";      
    $config['height'] = "80";

    $this->load->library('image_lib',$config);

    if(!$this->image_lib->resize())

    {

        echo $this->image_lib->display_errors();

    }

然后你应该按原样调用它,正确地替换参数:

$this->_createThumbnail($page_id, $fInfo['file_name']);