thinkphp8之文件上传

  • 文件上传安装

命令:composer require topthink/think-filesystem

二.上传代码、接收代码

<form action="/index/index/index" enctype="multipart/form-data" method="post">

<input type="file" name="image" /> <br>

<input type="submit" value="上传" />

</form>

$file = request()->file('image');

接收到$file是一个对象,多图片是对象里面是多个图片数组

object(think\file\UploadedFile)#66 (9) {

  ["test":"think\file\UploadedFile":private]=>

  bool(false)

  ["originalName":"think\file\UploadedFile":private]=>

  string(35) "bcc2c9150d753eda616e11c090726a1.png"

  ["mimeType":"think\file\UploadedFile":private]=>

  string(9) "image/png"

  ["error":"think\file\UploadedFile":private]=>

  int(0)

  ["hash":protected]=>

  array(0) {

  }

  ["hashName":protected]=>

  NULL

  ["extension":protected]=>

  NULL

  ["pathName":"SplFileInfo":private]=>

  string(41) "C:\Users\j\AppData\Local\Temp\php21D4.tmp"

  ["fileName":"SplFileInfo":private]=>

  string(11) "php21D4.tmp"

}

三.图片上传
$savename = \think\facade\Filesystem::disk('public')->putFile( 'topic', $file);

返回topic/20250625/fc51ff39bab056af7b1e8e33203243ba.png
路径是在public/storage/topic/20250625下面

四.上传配置
上传路径的配置config\filesystem.php里面,更改root和url属性可以更改存储的位置

      'public' => [

            // 磁盘类型

            'type'       => 'local',

            // 磁盘路径

            'root'       => app()->getRootPath() . 'public/storage',

            // 磁盘路径对应的外部URL路径

            'url'        => '/storage',

            // 可见性

            'visibility' => 'public',

        ],

例如:上传代码修改为$savename = \think\facade\Filesystem::disk('public')->putFile('sss', $file);
配置修改为: 'public' => [

            // 磁盘类型

            'type'       => 'local',

            // 磁盘路径

            'root'       => app()->getRootPath() . 'public/static',

            // 磁盘路径对应的外部URL路径

            'url'        => '/static',

            // 可见性

            'visibility' => 'public',

        ],
就会把图片上传到public/static/sss下面

  • \think\facade\Filesystem对象的用法
    位置:vendor/topthink/think-filesystem/src/Filesystem.php
    例如:disk方法加载配置里面的类型、getConfig方法获取配置等
  • 上传文件的验证

位置:vendor/topthink/think-validate/src/Validate.php
例如:方法fileSize验证文件大小(字节数),方法image验证文件宽高和类型(可以是数组或者逗号分割)等
使用示例: validate(['image'=>'fileSize:10240|fileExt:jpg|image:200,200,jpg'])

            ->check($files);

### ThinkPHP8 中实现图片文件批量上传 在ThinkPHP8中,为了实现图片文件的批量上传功能,可以借鉴之前版本的经验并结合新的特性来完成这一操作。下面是一个详细的示例说明如何通过ThinkPHP8框架来进行多张图片的同时上传。 #### 准备工作 确保服务器配置允许较大的文件大小以及足够的POST数据量: - `upload_max_filesize` 设置最大上传文件尺寸 - `post_max_size` 需要大于等于 `upload_max_filesize` - `memory_limit` 应该设置得更高以支持大文件处理[^3] 这些参数可以在php.ini文件里调整。 #### 控制器逻辑编写 创建一个新的控制器方法用于接收来自客户端提交的数据包,并对其进行解析和保存至指定位置。 ```php namespace app\controller; use think\Request; use think\File; public function uploadImages(Request $request){ // 获取多个文件对象数组 $files = $request->file('images'); foreach ($files as $key => $file) { // 判断是否有文件被上传 if (empty($file)) continue; try{ // 自定义存储路径 $savePath = 'uploads/images/' . date("Ymd") . '/'; // 使用唯一ID作为文件名前缀防止重复覆盖 $info = $file->validate([ 'ext'=>['jpg','jpeg','png'] ])->rule(function(){ return uniqid(); })->move(ROOT_PATH.'public/'.$savePath); if(!$info){ throw new \Exception($file->getError()); } // 返回成功信息给前端 echo "File {$key} uploaded successfully: ".str_replace("\\", "/", $info->getSaveName())."\n"; }catch (\Exception $e){ // 错误处理 echo "Error uploading file {$key}: ".$e->getMessage()."\n"; } } } ``` 此段代码实现了对传入请求中的每一个图像文件进行单独验证、重命名并移动到应用程序公共目录下的特定子文件夹内。如果遇到任何错误,则会捕获异常并将消息返回给调用方。 #### 客户端HTML表单设计 为了让用户能够一次选择多个文件,在HTML页面上构建一个多选输入框是非常必要的。这里给出一个简单的例子展示怎样构造这样的界面元素。 ```html <form action="/index.php/index/uploadImages" method="post" enctype="multipart/form-data"> Select images to upload: <input type="file" name="images[]" multiple> <button type="submit">Upload</button> </form> ``` 上述表单允许用户选取一组图片并通过HTTP POST方式发送给服务器上的对应路由地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值