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

× 请我吃糖~
打赏二维码