thinkphp6入门(20)-- 如何上传图片、文件

news/2024/12/23 8:01:48/

1. 配置文件

设置上传的路径

图片

对应文件夹

图片

2. 前端

<div class="card-body"><h1 class="card-title">用户头像</h1><img src="../../../uploads/{$user.avatar_photo_path}" alt="avatar"  height="100"/><form class="forms-sample" action="保存路径" method="post" enctype="multipart/form-data">选择图片(最大0.5M,格式jpg,jpeg,png):<input type="file" name="user_avatar_image"/>              <button type="submit" class="btn btn-primary mr-2">上传</button></form>
</div>

3. 后端

  /*** 保存用户头像*/function do_save_user_avatar()
{// 字段名$field_name = 'user_avatar_image';if(request()->isPost()){try {// 获取表单上传文件 例如上传了001.jpg$file = request()->file($field_name);// 使用验证器验证上传的文件validate(['file' => [// 限制文件大小(单位b),这里限制为1M'fileSize' => 0.5 * 1024 * 1024,// 限制文件后缀,多个后缀以英文逗号分割'fileExt'  => 'jpg,jpeg,png']])->check(['file' => $file]);// 上传到本地服务器// public/uploads文件夹下的profile文件夹$save_name = \think\facade\Filesystem::disk('public')->putFile('profile', $file);if($save_name){// 要更新的数据库// // 上传之后的操作return  $this->success('上传成功', '跳转路径');}} catch (\Throwable $e) {return $this->error('上传图片失败,' . $e->getMessage());}}}

注意:try catch中捕捉错误,是\Throwable $e

也可单独封装出一个上传文件的函数,包含压缩图片

// 需要安装composer require topthink/think-image
/*** 上传文件* $field_name = 'user_avatar_image';* $subdirectory public下的哪个子目录* $fileSize = 0.5 (单位为M)* $compressionRatio = 0.8 压缩成原来的80%* $fileExt 文件格式字符串* $is_image_thumb = 0, 图片是否压缩* $thumb_threshold = 0.5, 图片的size大于多少才压缩,单位M* $thumb_width = 500, 压缩的宽* $thumb_height = 500,  压缩的高*/
function uploadFile($field_name, $subDirectory, $fileSize = 1, $fileExt = 'jpg,jpeg,png', $is_image_thumb = 0, $thumb_threshold = 0.5, $thumb_width = 500, $thumb_height = 500)
{// 获取表单上传文件 例如字段名是'user_avatar_image'if(!array_key_exists($field_name, $_FILES)){$response = [];$response['code'] = 100;$response['msg'] = 'FILES中不存在该变量';$response['data'] = [];return  $response;}else{   // 变量'user_avatar_image'没有值if($_FILES[$field_name]['error'] != 0){$response = [];$response['code'] = 200;$response['msg'] = '没有上传文件';$response['data'] = [];return  $response;}}if(request()->isPost()){try {// 获取表单上传文件 例如上传了001.jpg$file = request()->file($field_name);// 使用验证器验证上传的文件validate(['file' => [// 限制文件大小(单位b),这里限制为1M'fileSize' => $fileSize * 1024 * 1024,// 限制文件后缀,多个后缀以英文逗号分割'fileExt'  => $fileExt]])->check(['file' => $file]);// 上传到本地服务器// uploads文件夹下的profile文件夹$save_name = '';// 是否需要压缩if($is_image_thumb == 0 || $file->getSize() < $thumb_threshold * 1024 * 1024){// 路径有日期文件夹$save_name = \think\facade\Filesystem::disk('public')->putFile($subDirectory, $file);}else{// 获取上传的图片,进行图片压缩$image = \think\Image::open($file);// 保存图片的路径处理$date = date('Ymd');$save_name = public_path() . 'uploads/' . $subDirectory . '/' . $date . '_' . $file->md5() . '.jpg';// 保存// 默认会按比例保存,但是最大宽度、高度不超过thumb(400, 400)设定值$img_edit = $image->thumb($thumb_width, $thumb_height)->save($save_name);}if($save_name){$response = [];$response['code'] = 1;$response['msg'] = '上传成功';$response['data']['save_name'] = $save_name;return $response;}} catch (\Throwable $e) {$response = [];$response['code'] = 300;$response['msg'] = '上传失败,' . $e->getMessage();$response['data'] = [];return $response;}}$response = [];$response['code'] = 400;$response['msg'] = '上传失败,非POST请求';$response['data'] = [];return $response;}

上传成功之后,如图

图片

by 软件工程小施同学


http://www.ppmy.cn/news/1352397.html

相关文章

(03)Hive的相关概念——分区表、分桶表

目录 一、Hive分区表 1.1 分区表的概念 1.2 分区表的创建 1.3 分区表数据加载及查询 1.3.1 静态分区 1.3.2 动态分区 1.4 分区表的本质及使用 1.5 分区表的注意事项 1.6 多重分区表 二、Hive分桶表 2.1 分桶表的概念 2.2 分桶表的创建 2.3 分桶表的数据加载 2.4 …

银河麒麟V10开机后黑屏解决方法

情况描述&#xff1a; 单位的国产化电脑采用银河麒麟V10系统&#xff0c;在使用了近两个月时间后&#xff0c;开机到加载桌面那一步无法加载图形化桌面。 原理讲解 Linux本是纯命令行形式的系统&#xff0c;银河麒麟基于Linux中的Ubuntu LTS内核开发&#xff0c;其图形化的品牌…

【Java记】数据类型与变量

一、数据类型 在Java中数据类型主要分为两类&#xff1a;基本数据类型和引用数据类型。基本数据类型有四类八种&#xff1a; 四类&#xff1a;整型、浮点型、字符型以及布尔型八种&#xff1a; 数据类型 关键字 内存占用 范围 字节型 byte 1 字节 -128~ 127 短整型 …

使用ORM模型操作MySQL数据库:Python爬虫数据持久化实践

源码分享 https://docs.qq.com/sheet/DUHNQdlRUVUp5Vll2?tabBB08J2 在Python爬虫开发中&#xff0c;数据持久化是一个重要的步骤。通常&#xff0c;我们会将爬取的数据保存到数据库中。本篇博客将介绍如何使用对象关系映射&#xff08;ORM&#xff09;模型在Python中操作MySQ…

Java学习第十四节之冒泡排序

冒泡排序 package array;import java.util.Arrays;//冒泡排序 //1.比较数组中&#xff0c;两个相邻的元素&#xff0c;如果第一个数比第二个数大&#xff0c;我们就交换他们的位置 //2.每一次比较&#xff0c;都会产生出一个最大&#xff0c;或者最小的数字 //3.下一轮则可以少…

Win11 Android studio 打开新项目提示 Microsoft Defender configuration 问题解决

Microsoft Defender configuration The IDE has detected Microsoft Defender with Real-Time Protection enabled. It might severely degrade IDE performance. It is recommended to make sure the following paths are added to the Defender folder exclusion list 。。…

使用C语言加载一个ELF格式可执行文件并执行

加载ELF可执行文件 视频讲解可以看这一个课程 使用ELF文件的原因 在这里把文件转化为二进制文件格式, 这里面没有其他的附加的信息, 但是把文件名改为elf结尾, 实际上是bin文件 SECTIONS {. 0x100000;.text : {*(.text)}.rodata : {*(.rodata)}. 0x200000;.data : {*.(data…

第二章 文档数据库 (DocDB) 简介 - JSON结构

文章目录 第二章 文档数据库 (DocDB) 简介 - JSON结构JSON结构文档 第二章 文档数据库 (DocDB) 简介 - JSON结构 JSON结构 IRIS 文档数据库支持 JSON 动态对象和 JSON 动态数组。可以使用 SET 命令创建这些 JSON 结构。 以下示例展示了如何使用 JSON 存储分层数据。第一个 S…