繁体   English   中英

Fileigniter上传文件并创建上传文件夹

[英]file uploading and creating upload folders with Codeigniter

我的Album_Model内部具有此功能:

public function upload($album_id, $album){
        $album= strtolower($album);

        $upload_config = array(
            'upload_path'   =>  './uploads/'.$album,
            'allowed_types' =>  'jpg|jpeg|gif|png',
            'max_size'      =>  '2000',
            'max_width'     =>  '680',
            'max_height'    =>  '435', 
        );

        $this->load->library('upload', $upload_config);

        // create an album if not already exist in uploads dir
// wouldn't make more sence if this part is done if there are no errors and right before the upload ??
        if (!is_dir('uploads')) {
            mkdir('./uploads', 0777, true);
        }
        if (!is_dir('uploads/'.$album)) {
            mkdir('./uploads/'.$album, 0777, true);
        }

        if (!$this->upload->do_upload('imgfile')) { 
            // upload failed
            return array('error' => $this->upload->display_errors('<span>', '</span>'));
        } else {
            // upload success
            $upload_data = $this->upload->data();
            return true;
        }
    }

因此,这基本上是将图像上传到相册。 另外,如果文件夹相册还不存在,它将创建一个新相册。

我正在做一些测试,发现可能是一个小错误。 当我强迫表单执行一些无效的上载尝试并且上载失败时,正如预期的那样,但是仍然创建了相册文件夹(假设相册文件夹不存在)。

如果没有错误,并且在上载图片之前,谁也不会更想创建相册文件夹?如果可以,该如何解决呢?

您已经设置了用于检查目录是否存在的标志。 我已更改您的代码以使其根据您的需要工作。

<?php

public function upload($album_id, $album)
{
    $album = strtolower($album);

    $upload_config = array('upload_path' => './uploads/' . $album, 'allowed_types' =>
        'jpg|jpeg|gif|png', 'max_size' => '2000', 'max_width' => '680', 'max_height' =>
        '435', );

    $this->load->library('upload', $upload_config);

    // create an album if not already exist in uploads dir
    // wouldn't make more sence if this part is done if there are no errors and right before the upload ??
    if (!is_dir('uploads'))
    {
        mkdir('./uploads', 0777, true);
    }
    $dir_exist = true; // flag for checking the directory exist or not
    if (!is_dir('uploads/' . $album))
    {
        mkdir('./uploads/' . $album, 0777, true);
        $dir_exist = false; // dir not exist
    }
    else{

    }

    if (!$this->upload->do_upload('imgfile'))
    {
        // upload failed
        //delete dir if not exist before upload
        if(!$dir_exist)
          rmdir('./uploads/' . $album);

        return array('error' => $this->upload->display_errors('<span>', '</span>'));
    } else
    {
        // upload success
        $upload_data = $this->upload->data();
        return true;
    }
}

?>

接受的答案不正确!!!

正确的方法是扩展Upload库

编码:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * File Uploading Class Extension
 *
 * @package     CodeIgniter
 * @subpackage  Libraries
 * @category    Uploads
 * @author      Harrison Emmanuel (Eharry.me)
 * @link        https://www.eharry.me/blog/post/my-codeigniter-upload-extension/
 */
class MY_Upload extends CI_Upload {

    /**
     * Validate Upload Path
     *
     * Verifies that it is a valid upload path with proper permissions.
     *
     * @return  bool
     */
    public function validate_upload_path()
    {
        if ($this->upload_path === '')
        {
            $this->set_error('upload_no_filepath', 'error');
            return FALSE;
        }

        if (realpath($this->upload_path) !== FALSE)
        {
            $this->upload_path = str_replace('\\', '/', realpath($this->upload_path));
        }

        if ( ! is_dir($this->upload_path))
        {
            // EDIT: make directory and try again
            if ( ! mkdir ($this->upload_path, 0777, TRUE))
            {
                $this->set_error('upload_no_filepath', 'error');
                return FALSE;
            }
        }

        if ( ! is_really_writable($this->upload_path))
        {
            // EDIT: change directory mode
            if ( ! chmod($this->upload_path, 0777))
            {
                $this->set_error('upload_not_writable', 'error');
                return FALSE;
            }
        }

        $this->upload_path = preg_replace('/(.+?)\/*$/', '\\1/',  $this->upload_path);
        return TRUE;
    }
}


如何使用:

只需创建application/libraries/MY_Upload.php并将上面的代码粘贴到其中即可。 就这样!


更多信息:


注意:

此扩展与CodeIgniter 3.x和2.x版本兼容。

您所拥有的方式将始终创建该目录(如果该目录不存在)。

要回答您的问题..是的,在上载之前创建文件夹会更有意义。

尝试把这个:

if (!is_dir('uploads')) {
    mkdir('./uploads', 0777, true);
        }
if (!is_dir('uploads/'.$album)) {
    mkdir('./uploads/'.$album, 0777, true);
        }

在里面:

if (!$this->upload->do_upload('imgfile')) { 
        // upload failed
        return array('error' => $this->upload->display_errors('<span>', '</span>'));
    } else {
        // put if statements here.
        // upload success
        $upload_data = $this->upload->data();
        return true;
    }

所以它看起来像这样:

if (!$this->upload->do_upload('imgfile')) { 
        // upload failed
        return array('error' => $this->upload->display_errors('<span>', '</span>'));
    } else {
        if (!is_dir('uploads')) {
        mkdir('./uploads', 0777, true);
    }
    if (!is_dir('uploads/'.$album)) {
        mkdir('./uploads/'.$album, 0777, true);
    }
        // upload success
        $upload_data = $this->upload->data();
        return true;
    }

如果我对您的理解正确,这应该做你想要的。

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM