thinkPHP上传文件问题

html页面中有两个input,如下:


其中,第一个input上传单个html/htm文件,第二个上传多个html文件的附件。

控制器中有两个方法,用于不同input文件的上传,一个用upload类的uploadOne方法,另一个用upload类的upload方法。

如下:

/**
     * 单个实验信息文件上传函数
     * @param $expName :提交的实验名称,用于给文件命名
     * @return array:old_name——上传时的文件名;new_name——重命名后的文件名
     */
    public function upload($expName)
    {
        $config = array(
            'maxSize' => 3145728,                  // 设置文件上传大小
            'exts' => array('htm', 'html'),    // 设置文件上传类型
            'rootPath' => './uploadFile/',          // 设置文件上传目录
            'autoSub' => false,                   // 不使用子目录保存,即不以“日期命名的文件夹”为目录
            'saveName' => '',                       // 设置文件的文件名不变
            'replace' => true,                    // 重名时覆盖
        );
        $obj = new \Think\Upload($config);           // 实例化上传类
        $info = $obj->uploadOne($_FILES['file']);    // 上传文件
        $old_name = './uploadFile/' . $info['savename'];
        $new_name = './uploadFile/' . $expName . '_' . $info['savename'];
        rename($old_name, $new_name);                // 文件重命名
        $ret = array('old_name' => $info['name'], 'new_name' => $expName . '_' . $info['savename']);
        return $ret;
    }

    /**
     * 多个实验信息文件附件上传函数
     * @param $fileName:提交的实验信息文件名称,用于给文件夹命名
     * @return bool:true——附件上传成功;false——附件上传失败
     */
    public function uploadAttachment($fileName)
    {
        if (!file_exists('./uploadFile/' . $fileName)) {   // 判断“以实验信息文件名为名的文件夹”是否存在
            $res = mkdir('./uploadFile/' . $fileName);  // 创建“以实验信息文件名为名的文件夹”
            if (!$res) {
                return false;
            }
        }
        $config = array(
            'maxSize' => 3145728,                  // 设置文件上传大小
            'rootPath' => './uploadFile/' . $fileName . '/',          // 设置文件上传目录
            'autoSub' => false,                   // 不使用子目录保存,即不以“日期命名的文件夹”为目录
            'saveName' => '',                      // 设置文件的文件名不变
            'replace' => true,                    // 重名时覆盖
        );
        $obj = new \Think\Upload($config);           // 实例化上传类
        $info = $obj->upload(array($_FILES['attachment']));    // 上传文件
        return $info;
    }

然后,在另一个方法中调用这两个方法,即:

$res1 = $this->upload();

$res 2 = $this->uploadAttachment();


需要注意的问题:

1、uploadOne()要带参数,即uploadOne($_FILES['file'])

2、上传到uploadFile/file文件夹时,(file是自动创建的文件夹),实列化上传类的rootPath要设置为‘./uploadFile/file/’;autoSub设置为false。

autoSub若为true,则上传文件的路径为:./uploadFile/file/日期/文件

3、对于第二种input,实例化上传类后,调用upload方法时,要加参数,即

$obj->upload(array($_FILES['attachment']));

另外,array()不可缺少,否则会报错!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值