thinkphp如何实现文件上传功能

32次阅读

ThinkPHP 6 实现文件上传需创建上传目录并设置可写权限,前端表单使用 multipart/form-data 编码,控制器通过 Request::file() 获取文件,利用 Filesystem 组件的 putFile() 方法自动重命名并保存至 public/storage 目录,支持 validate() 自定义大小、类型限制,超出规则抛出 ValidateException 异常,上传后执行 php think storage:link 创建软链接,即可通过 /storage/avatars/xxx.jpg 访问文件,整体流程简洁安全。

thinkphp如何实现文件上传功能

ThinkPHP 实现文件上传功能非常方便,框架内置了完善的文件处理类,可以快速完成图片、文档等常见格式的上传操作。下面以 ThinkPHP 6 为例,介绍如何实现一个基本且安全的文件上传流程。

配置上传目录

在项目根目录下创建用于存放上传文件的目录,例如:

public/uploads/

确保该目录有可写权限,Web 服务器能正常读写。

前端表单设置

上传页面需要使用 multipart/form-data 编码类型,才能正确提交文件数据:

立即学习PHP免费学习笔记(深入)”;

zuojiankuohaophpcnform action=”/upload” method=”post” enctype=”multipart/form-data”>
  <input type=”file” name=”image” required>
  <button type=”submit”>上传文件</button>
</form>

控制器处理上传

在控制器中使用 thinkfacadeRequest 获取上传文件,并进行验证和移动操作:

use thinkfacadeRequest;
use thinkexceptionValidateException;

public function upload()
{
  $file = Request::file(‘image’);

  // 验证并上传文件到指定目录
  try {
    $savename = thinkfacadeFilesystem::disk(‘public’)->putFile(‘avatars’, $file);
    return json([‘code’ => 0, ‘msg’ => ‘上传成功’, ‘data’ => $savename]);
  } catch (ValidateException $e) {
    return json([‘code’ => 1, ‘msg’ => ‘上传失败:’ . $e->getMessage()]);
  }
}

说明:

  • Request::file(‘image’) 获取上传的文件对象
  • putFile() 自动重命名文件并保存到 public/storage/avatars 目录下(基于 storage 目录)
  • ThinkPHP 会自动校验文件合法性(如是否为真实图像),也可自定义规则

自定义验证规则

如果需要更严格的控制,比如限制类型、大小:

thinkphp如何实现文件上传功能

Cutout.Pro

AI驱动的视觉设计平台

thinkphp如何实现文件上传功能104

查看详情 thinkphp如何实现文件上传功能

$savename = thinkfacadeFilesystem::disk(‘public’)
  ->validate([
    ‘size’ => 2048000, // 最大 2MB
    ‘ext’ => ‘jpg,png,gif,jpeg’
  ])
  ->putFile(‘avatars’, $file);

超出限制会抛出 ValidateException 异常,可在 catch 中捕获提示用户。

获取访问路径

上传后返回的路径是类似 avatars/xxxxx.jpg,要通过 URL 访问,需配置路由或软链接:

执行命令创建软链接(Linux/Mac):

php think storage:link

之后可通过 /storage/avatars/xxxxx.jpg 直接访问。

基本上就这些。ThinkPHP 的 Filesystem 组件封装得很简洁,配合验证机制能有效防止恶意上传。只要注意目录权限和文件类型限制,就能实现一个安全可靠的上传功能。

以上就是thinkphp php linux js 前端 json cad 编码 mac 路由 red php json thinkphp 封装 try catch Filesystem public function 对象 input linux

thinkphp php linux js 前端 json cad 编码 mac 路由 red php json thinkphp 封装 try catch Filesystem public function 对象 input linux

text=ZqhQzanResources