不言不语

您现在的位置是: 首页 >  PHP  >  ThinkPHP

ThinkPHP

thinkphp5上传到本地图片

2022-05-29ThinkPHP
日常开发中,经常会用到上传图片的功能,ThinkPHP5.0对文件上传的支持更加简单,下面分享一则实例。

上传文件


假设表单代码如下:

<form action="/index/index/upload" enctype="multipart/form-data" method="post">
    <input type="file" name="image" /> 
    <br>
     <input type="submit" value="上传" />
 </form>

然后在控制器中添加如下的代码:

public function upload(){
    // 获取表单上传文件 例如上传了001.jpg
    $file = request()->file('image');
    
    // 移动到框架应用根目录/public/uploads/ 目录下
    if($file){
        $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方法成功的话返回的是一个\think\File对象,你可以对上传后的文件进行后续操作。

多文件上传

如果你使用的是多文件上传表单,例如:

<form class="form form-horizontal"  method="post" action="{:url('admin/article/addArticle')}" enctype="multipart/form-data">
		<div class="row cl">
			<label class="form-label col-xs-4 col-sm-2">图集:</label>
			<div class="formControls col-xs-8 col-sm-9">
				<input id="file-0" type="file" multiple class="file" name="path[]" >
			</div>
		</div>
		<div class="row cl">
			<div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-2">
				<input class="btn btn-primary radius"  type="submit" value="&nbsp;&nbsp;提交&nbsp;&nbsp;">
			</div>
		</div>
	</form>

控制器代码可以改成:


 public function addArticle()
    {
        //判断提交的方式
        if(\request()->isPost()){
            //多图上传
            $arryFile =\request()->file("path");
            $arrImg=[];
            foreach ($arryFile as $File){
                $pathImg="";
                //移动文件到框架应用更目录的public/uploads/
                $info = $File->move(ROOT_PATH . 'public' . DS . 'upload' . DS . 'article' . DS . date('Y') . DS . date('m-d'),md5(microtime(true)));
                if ($info) {
                    $pathImg = "/public/upload/article/" . date('Y') . '/' . date('m-d') . '/' . $info->getFilename();
                } else {
                    //错误提示用户
                    return $this->error($File->getError());
                }//                $result["img_url"]
                $arrImg[]= $pathImg;
            }
            $insert_data["img_url"]=implode(",",$arrImg);
            Db::name("articles")->insert($insert_data);
        }
        return $this->fetch("article-add");
    }

上传验证

支持对上传文件的验证,包括文件大小、文件类型和后缀:


public function upload(){
    // 获取表单上传文件 例如上传了001.jpg
    $file = request()->file('image');
    // 移动到框架应用根目录/public/uploads/ 目录下
    $info = $file->validate(['size'=>15678,'ext'=>'jpg,png,gif'])->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();
    }}

文章评论