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()不可缺少,否则会报错!