tp5自定义上传文件名和保存路径
在上传文件后调用file类的 mov方法的时候就可以自定义上传文件的类型
\think\File mov方法:
/**
- 移动文件
- @param string $path 保存路径
- @param string|bool $savename 保存的文件名 默认自动生成
- @param boolean $replace 同名文件是否覆盖
@return false|SplFileInfo false-失败 否则返回SplFileInfo实例
*/
public function move($path, $savename = true, $replace = true)
{
// 文件上传失败,捕获错误代码
if (!empty($this->info[‘error’])) {$this->error($this->info['error']); return false;
}
// 检测合法性
if (!$this->isValid()) {$this->error = '非法上传文件'; return false;
}
// 验证上传
if (!$this->check()) {return false;
}
$path = rtrim($path, DS) . DS;
// 文件保存命名规则
$saveName = $this->buildSaveName($savename);
$filename = $path . $saveName;// 检测目录
if (false === $this->checkPath(dirname($filename))) {return false;
}
/ 不覆盖同名文件 /
if (!$replace && is_file($filename)) {$this->error = '存在同名文件' . $filename; return false;
}
/ 移动文件 /
if ($this->isTest) {rename($this->filename, $filename);
} elseif (!move_uploaded_file($this->filename, $filename)) {
$this->error = '文件上传保存错误!'; return false;
}
// 返回 File对象实例
$file = new self($filename);
$file->setSaveName($saveName);
$file->setUploadInfo($this->info);
return $file;
}
auth 文件命名规则
[caption id=”attachment_105” align=”alignnone” width=”300”] thinkphp5上传文件命名规则[/caption]
示例:
表单代码:
<form action=”/index/index/upload” enctype=”multipart/form-data” method=”post”>
<input type=”file” name=”image” />
<input type=”submit” value=”上传” />
</form>
控制器代码:
public function upload(){
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file(‘image’);
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move(ROOT_PATH . ‘public’ . DS . ‘uploads’);
if($info){
// 成功上传后 获取上传信息
// 输出 jpg
echo $info->getExtension();
// 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
echo $info->getSaveName();
// 输出 42a79759f284b767dfcb2a0197904287.jpg
echo $info->getFilename();
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
move方法成功的话返回的是一个SplFileInfo对象,你可以对上传后的文件进行后续操作,比如改名。
最后更新: 2018年02月02日 23:25
原始链接: http://tekin.yunnan.ws/PHP技术/201705/29-tp5-diy-filename.html