ThinkPHP 文件上传 fileSystem 扩展的使用

简介: 本文介绍了在ThinkPHP框架中使用filesystem扩展进行文件上传的方法。包括安装filesystem扩展、了解配置文件、上传文件的验证规则以及文件上传的示例代码,旨在帮助开发者实现文件的安全上传和存储。

ThinkPHP 文件上传 扩展 filesystem

ThinkPHP 为我们 提供了 filesystem扩展用于上传文件,要使用 filesystem 扩展首先要使用composer进行安装,然后安装完毕后,配置相应的上传规则即可。

一、安装 FileSystem 扩展

composer require topthink/think-filesystem

二、认识 filesystem 配置文件 config/filesystem.php

文件上传的相关配置在应用的config目录下的filesystem.php中进行配置,下面是默认的配置文件

<?php

return [
    // 默认磁盘
    'default' => 'local',
    // 磁盘列表
    'disks'   => [
        'local'  => [
            'type' => 'local',
            'root' => app()->getRuntimePath() . 'storage',
        ],
        'public' => [
            // 磁盘类型
            'type'       => 'local',
            // 磁盘路径
            'root'       => app()->getRootPath() . 'public/storage',
            // 磁盘路径对应的外部URL路径
            'url'        => '/storage',
            // 可见性
            'visibility' => 'public',
        ],
        // 更多的磁盘配置信息
    ],
];

在这里插入图片描述

默认的文件上传存储到本地的话,(单应用模式) 存放的位置是当前运行时目录下的storage目录下面生成以当前日期为子目录,以微秒时间的md5编码为文件名的文件
如果是多应用模式下的话,那么存放的位置就是项目根目录下的 runtime 目录中的 应用名称/storage目录中(其实就是多加了一层应用名称以示区分)。

在这里插入图片描述

其中的配置规则也可以自行扩充。

三、上传验证(涉及到验证器的知识点)

文件上传验证属性的说明:

验证 参数说明
fileSize 上传文件的最大字节
fileExt 文件后缀,多个用逗号分割或者数组
fileMime 文件MIME类型,多个用逗号分割或者数组
image 验证图像文件的尺寸和类型

验证图片后缀是否正确,并且返回json字符串:

public function upload(){
   
    $files = request()->file();
    try {
   
        // 校验图片后缀是否为jpg或者png,其他规则可以是哟 | 分隔去配置
        validate(['image'=>'fileExt:jpg,png'])
            ->check($files);
        $savename = [];
        foreach($files as $file) {
   
            $savename[] = \think\facade\Filesystem::disk('public')->putFile( 'index', $file);
        }
        //dump($savename[0]);
        return json($savename[0]); // 返回图片上传路径
    } catch (\think\exception\ValidateException $e) {
   
        echo $e->getMessage();
    }
}

官方文档提供的一个验证示例:

public function upload(){
   
    // 获取表单上传文件
    $files = request()->file();
    try {
   
        validate(['image'=>'fileSize:10240|fileExt:jpg|image:200,200,jpg'])
            ->check($files);
        $savename = [];
        foreach($files as $file) {
   
            $savename[] = \think\facade\Filesystem::putFile( 'topic', $file);
        }
    } catch (\think\exception\ValidateException $e) {
   
        echo $e->getMessage();
    }
}

四、文件上传demo

表单代码:

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

控制器代码:

// 这里为了简单就没使用文件上传验证,但是实际开发中是必须配置的
public function upload(){
   
  // 获取表单上传文件
  $file = request()->file('image');
  // 上传到本地服务器  public/storage/index(应用名称) 目录下
  $savename = \think\facade\Filesystem::disk('public')->putFile( 'index', $file);
  // 通常文件上传完毕后,前后端分离的话是需要给前端返回一个json字符串,内容是文件上传的url路径
  return json($savename);
}

在这里插入图片描述

在这里插入图片描述


相关文章
|
PHP 开发工具
ThinkPHP6.0 发送阿里云短信
一、登录阿里云,注册短信服务 1.阿里云短信服务:dysms.console.aliyun.com/overview
3086 0
|
移动开发 前端开发 HTML5
分享136个HTML公司企业模板,总有一款适合您
分享136个HTML公司企业模板,总有一款适合您
571 0
|
JavaScript
fastadmin表格列表内部自定义按钮
fastadmin表格列表内部自定义按钮
941 0
fastadmin表格列表内部自定义按钮
|
开发框架 移动开发 小程序
uniapp实现上传文件功能
uniapp实现上传文件功能
1710 0
|
8月前
|
安全 API PHP
拥抱现代PHP:探索枚举(Enum)的力量
拥抱现代PHP:探索枚举(Enum)的力量
584 104
|
小程序 计算机视觉
UNIAPP微信小程序使用Echarts
UNIAPP微信小程序使用Echarts
4909 0
|
存储 中间件 API
ThinkPHP 集成 jwt 技术 token 验证
本文介绍了在ThinkPHP框架中集成JWT技术进行token验证的流程,包括安装JWT扩展、创建Token服务类、编写中间件进行Token校验、配置路由中间件以及测试Token验证的步骤和代码示例。
ThinkPHP 集成 jwt 技术 token 验证
|
关系型数据库 MySQL PHP
利用PhpStorm、phpstudy和xdebug快速构建PHP调试环境
至此,我们已经完成了PHP调试环境的构建。现在,你可以在PhpStorm中打开你的PHP项目,设置断点,然后开始调试你的代码了。希望这个指南能帮助你快速构建PHP调试环境,提高你的开发效率。
760 26
|
缓存 PHP
【ThinkPHP框架教程·Part-03】开启调试与配置文件
本章节介绍如何开启系统的调试功能及理解框架配置信息。开发阶段建议开启调试模式,通过修改 `.env` 文件中的 `APP_DEBUG=true` 实现。调试模式能提高排错能力,但会影响执行效率,生产环境应关闭。调试开启后,页面右下角会出现 Trace 调试图标。此外,还介绍了两种配置文件形式(`.env` 和 `config`),以及它们的优先级和获取方式。本地测试时 `.env` 优先于 `config`,部署后则忽略 `.env`,使用 `config` 配置。
1015 2
【ThinkPHP框架教程·Part-03】开启调试与配置文件
|
JavaScript 前端开发 API
Vue 2 与 Vue 3 的区别:深度对比与迁移指南
Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架,在过去的几年里,Vue 2 一直是前端开发中的重要工具。而 Vue 3 作为其升级版本,带来了许多显著的改进和新特性。在本文中,我们将深入比较 Vue 2 和 Vue 3 的主要区别,帮助开发者更好地理解这两个版本之间的变化,并提供迁移建议。 1. Vue 3 的新特性概述 Vue 3 引入了许多新特性,使得开发体验更加流畅、灵活。以下是 Vue 3 的一些关键改进: 1.1 Composition API Composition API 是 Vue 3 的核心新特性之一。它改变了 Vue 组件的代码结构,使得逻辑组
2376 0