langcier 发表于 2013-7-17 16:58:53

CI 多文件上传 Multiple upload

今天在处理CI多文件上传时,需要用到多文件上传,看到有帖子使用 swfupload 上传方式,发现并不适合我的需求的(当上传的文件需要和表单数据一同提交时,swfupload 上传就不适合了),抓狂。也有看到一些文章但都是很老的了,于是写了个基于CI2.13的版本.
贴代码:

        /**
       * Upload more file
       *
       * $param        string        field
       * @return        array
       */
        public function multiple($field)
        {
                // Is $_FILES[$field] set? If not, no reason to continue.
                if ( ! isset($_FILES[$field]))
                {
                        $this->set_error('upload_no_file_selected');
                        return FALSE;
                }

                // 临时文件上传数组,用于整合自己想要的形式
                $tmpfiles        = array();
                for ($i = 0, $len = count($_FILES[$field]['name']); $i < $len; $i ++)
                {
                        if ($_FILES[$field]['size'][$i])
                        {
                                $tmpfiles['_SR_' . $i] = array(
                                                'name'        => $_FILES[$field]['name'][$i],
                                                'type'        => $_FILES[$field]['type'][$i],
                                                'tmp_name'        => $_FILES[$field]['tmp_name'][$i],
                                                'error' => $_FILES[$field]['error'][$i],
                                                'size'        => $_FILES[$field]['size'][$i],
                                        );
                        }
                }

                //覆盖 $_FILES 内容
                $_FILES        = $tmpfiles;

                $errors        = array();
                $files        = array();
                $index        = 0;
                $_tmp_name        = preg_replace('/(.+)$/', '', $this->file_name);
                foreach ($_FILES as $key => $value)
                {
                        /*
                       * 多文件上传的命名规则,用于替代CI中自由的文件命名方式
                       *
                       * -SR-17-50557-0.jpg
                       * -SR-17-50557-1.jpg
                       * -SR-17-50557-2.jpg
                       */
                        $this->_file_name_override        = $_tmp_name . '-' . $index;
                        if( ! $this->do_upload($key))
                        {
                                $errors[$index] = $this->display_errors('', '');
                                $this->error_msg        = array();
                        }
                        else
                        {
                                $files[$index] = $this->data();
                        }
                        $index        ++;
                }
                // 返回数组
                return array(
                                'error'        => $errors,
                                'files'        => $files
                        );
        }

将此代码贴在 system\libraries\Upload.php 里即可,也可写扩展在你的核心中 \application\libiraries\MY_Upload.php中
我是直接将system\libraries\Upload.php粘到\application\libiraries\Upload.php
本人试了,挺好。
不好意思说干了好几年的PHP··· 如有赞助空间更佳,因为敝人想要建个博客。。。blog.stepreal.com 没有空间

__唯愛__ 发表于 2013-9-11 13:35:30

{:soso__17615529269517227981_3:}

BQsummer 发表于 2014-5-11 14:32:02

菜鸟的悲哀是有了代码不会用,能举个例子吗:'(

smilecc123 发表于 2014-5-12 10:46:09

这个在原生的php里面就有的吧,不在ci里面也可以用,。。

chenrui310 发表于 2016-12-15 12:19:51

赞!

1669721514 发表于 2016-12-20 10:06:46

有没有写多图片上传完善一点的{:1_1:}
页: [1]
查看完整版本: CI 多文件上传 Multiple upload