10-1 ThinKPHP5单文件上传

10-1 ThinKPHP5单文件上传

洛氯扒唱攘碌灭扮泪盖割肆欣

10-1 ThinKPHP5单文件上传第1张

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\controller\Index.php:

<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    public function index()
    {
        return $this->fetch();
    }
}

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\view\index\index.html:

<h3>文件上传</h3>
<form action="{:url('upload')}" method="post" enctype="multipart/form-data">
    <input type="file" name="file">

    <p><button>上传</button></p>
</form>

在index控制器下创建upload()

<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    public function index()
    {
        return $this->fetch();
    }
    //处理上传的文件
    public function upload()
    {
        return "上传成功!";
    }

}

执行:

10-1 ThinKPHP5单文件上传第2张

10-1 ThinKPHP5单文件上传第3张


修改upload(),处理文件上传

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\controller\Index.php:

<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    public function index()
    {
        return $this->fetch();
    }
    //处理上传的文件
    public function upload()
    {
        // 1.获取文件信息
        // 参数必须与 demo3.html 中<input type="file"name="file">的 name 值一致
        $file=$this->request->file('file');//返回值为对象
        dump($file);
    }

}

执行:

10-1 ThinKPHP5单文件上传第4张

10-1 ThinKPHP5单文件上传第5张


修改控制器,完善上传

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\controller\Index.php:

<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    public function index()
    {
        return $this->fetch();
    }
    //处理上传的文件
    public function upload()
    {
        // 1.获取文件信息
        // 参数必须与 demo3.html 中<input type="file"name="file">的 name 值一致
        $file=$this->request->file('file');//返回值为对象
        // 2.移动文件到服务器上的指定目录:public/uploads
        //如果上传成功,返回的是一个已经赋值的文件对象,失败返回 false
        $res=$file->validate(['ext'=>'jpg,jpeg,png'])->move('uploads');
        // 3.对上传文件进行验证:文件大小,文件类型
        if($res==false)
        {
            return $this->error($file->getError());
        }
        $this->success('上传成功!');
    }

}

创建uploads目录

10-1 ThinKPHP5单文件上传第6张

执行:

10-1 ThinKPHP5单文件上传第7张

10-1 ThinKPHP5单文件上传第8张

上传符合规则的文件

10-1 ThinKPHP5单文件上传第9张

10-1 ThinKPHP5单文件上传第10张

10-1 ThinKPHP5单文件上传第11张


bug:此时不选择文件就点击上传会报错

10-1 ThinKPHP5单文件上传第12张

10-1 ThinKPHP5单文件上传第13张

修改控制器:

<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    public function index()
    {
        return $this->fetch();
    }
    //处理上传的文件
    public function upload()
    {
        // 1.获取文件信息
        // 参数必须与 demo3.html 中<input type="file"name="file">的 name 值一致
        $file=$this->request->file('file');//返回值为对象
        //判断用户是否选择文件
        if(is_null($file))
        {
            $this->error("没有选择文件");
        }

        // 2.移动文件到服务器上的指定目录:public/uploads
        //如果上传成功,返回的是一个已经赋值的文件对象,失败返回 false
        $res=$file->validate(['ext'=>'jpg,jpeg,png'])->move('uploads');
        // 3.对上传文件进行验证:文件大小,文件类型
        if($res==false)
        {
            return $this->error($file->getError());
        }
        $this->success('上传成功!');
    }

}

执行:

10-1 ThinKPHP5单文件上传第14张

10-1 ThinKPHP5单文件上传第15张


获取上传文件的存储路径和保存文件名:

<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    public function index()
    {
        return $this->fetch();
    }
    //处理上传的文件
    public function upload()
    {
        // 1.获取文件信息
        // 参数必须与 demo3.html 中<input type="file"name="file">的 name 值一致
        $file=$this->request->file('file');//返回值为对象
        //判断用户是否选择文件
        if(is_null($file))
        {
            $this->error("没有选择文件");
        }

        // 2.移动文件到服务器上的指定目录:public/uploads
        //如果上传成功,返回的是一个已经赋值的文件对象,失败返回 false
        $res=$file->validate(['ext'=>'jpg,jpeg,png'])->move('uploads');
        // 3.对上传文件进行验证:文件大小,文件类型
        if($res==false)
        {
            return $this->error($file->getError());
        }

        // 获取上传文件的保存路径
        echo '上传文件的存储路径为:' .$res->getSaveName().'<br>';
        // 获取上传文件的保存文件名
        echo '上传文件的存储名称为:' .$res->getFilename().'<br>';
    }

}

执行:

10-1 ThinKPHP5单文件上传第16张

10-1 ThinKPHP5单文件上传第17张


10-1 ThinKPHP5单文件上传第18张


垃裁膏困撂里季添鼻隋郡势澈