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

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

也可单独封装出一个上传文件的函数

/*** 上传文件* $field_name = 'user_avatar_image';* $subdirectory public下的哪个子目录* $fileSize = 0.5 (单位为M)* $fileExt 文件格式字符串*/function uploadFile($field_name, $subDirectory, $fileSize = 1, $fileExt = 'jpg,jpeg,png')
{// 获取表单上传文件 例如字段名是'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 = \think\facade\Filesystem::disk('public')->putFile($subDirectory, $file);if($save_name){$response = [];$response['code'] = 1;$response['msg'] = '上传成功';$response['data'] = [];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.hqwc.cn/news/469496.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【leetcode】深搜、暴搜、回溯、剪枝(C++)2

深搜、暴搜、回溯、剪枝&#xff08;C&#xff09;2 一、括号生成1、题目描述2、代码3、解析 二、组合1、题目描述2、代码3、解析 三、目标和1、题目描述2、代码3、解析 四、组合总和1、题目描述2、代码3、解析 五、字母大小写全排列1、题目描述2、代码3、解析 六、优美的排列1…

C语言学习day13:嵌套循环+练习题(时钟+乘法表)

嵌套循环通常是外面一层for循环&#xff0c;里面n层for循环 代码&#xff1a; int main1601() {//外层执行一次&#xff0c;内层执行一周for (int i 0; i < 5; i){for (int j 0; j < 5; j){printf("i%d,j%d\n",i,j);}}system("pause");return EX…

移动机器人激光SLAM导航(五):Cartographer SLAM 篇

参考 Cartographer 官方文档Cartographer 从入门到精通 1. Cartographer 安装 1.1 前置条件 推荐在刚装好的 Ubuntu 16.04 或 Ubuntu 18.04 上进行编译ROS 安装&#xff1a;ROS学习1&#xff1a;ROS概述与环境搭建 1.2 依赖库安装 资源下载完解压并执行以下指令 https://pa…

搜索专项---最小步数模型

文章目录 魔板 一、魔板OJ链接 本题思路:最小步数模型: 将整个“图”视为一个状态也即一个节点. 状态的转移视为权值为1的边. BFS求解, 注意几点: 状态的存储: 一般用字符串存储状态, 用哈希表存储初始状态到每个状态的距离. 方案记录: 记忆数组存储. 本题中需要存储上一个状…

AI在工业物联网(IIoT)中的安全管理与应用

在开放的工业互联网环境中&#xff0c;数百万个基于物联网的终端和中间设备&#xff0c;需要全天候地持续通信并保持在线状态。不过&#xff0c;这些设备往往由于最初设计上的限制&#xff0c;在机密性、完整性、可用性、扩展性、以及互操作性上&#xff0c;存在着各种安全漏洞…

RK3568笔记十五:触摸屏测试

若该文为原创文章&#xff0c;转载请注明原文出处。 使用正点原子的ATK-RK3568板子&#xff0c;一直在测试屏幕和视频&#xff0c;突然想到触摸屏测试&#xff0c;一直没有用过&#xff0c;原子给的demo跑的是QT系统&#xff0c;触摸功能是正常的&#xff0c;测试一下&#xf…

[缓存] - 2.分布式缓存重磅中间件 Redis

1. 高性能 尽量使用短key 不要存过大的数据 避免使用keys *&#xff1a;使用SCAN,来代替 在存到Redis之前压缩数据 设置 key 有效期 选择回收策略(maxmemory-policy) 减少不必要的连接 限制redis的内存大小&#xff08;防止swap&#xff0c;OOM&#xff09; slowLog …

随机过程及应用学习笔记(三)几种重要的随机过程

介绍独立过程和独立增量过程。重点介绍两种独立增量过程-—维纳过程和泊松过程。 目录 前言 一、独立过程和独立增量过程 1、独立过程&#xff08;Independent Process&#xff09; 2、独立增量过程&#xff08;Independent Increment Process&#xff09; 二、正态过程&am…

ICLR 2023#Learning to Compose Soft Prompts for Compositional Zero-Shot Learning

组合零样本学习&#xff08;CZSL&#xff09;中Soft Prompt相关工作汇总&#xff08;一&#xff09; 文章目录 组合零样本学习&#xff08;CZSL&#xff09;中Soft Prompt相关工作汇总&#xff08;一&#xff09;ICLR 2023#Learning to Compose Soft Prompts for Compositional…

HDFS的超级用户

一. 解释原因 HDFS(Hadoop Distributed File System)和linux文件系统管理一样&#xff0c;也是存在权限控制的。 但是很不一样的是&#xff0c; 在Linux文件系统中&#xff0c;超级用户Superuser是root而在HDFS中&#xff0c;超级用户Superuser是启动了namenode的用户&#x…

解决ucore实验qemu不断重启问题

解决 ucore 实验 qemu 不断重启问题 做清华大学操作系统 ucore 实验 (x86版本)&#xff0c;实验一编译后运行 qemu 发现系统不断重启&#xff0c;无法正常运行 kernel。实验环境是 ubuntu 22.04&#xff0c;gcc 11.4.0&#xff0c;ld 2.38。最终查证是链接脚本 kernel.ld 导致…

MySQL 基础知识(五)之数据增删改

目录 1 插入数据 2 删除数据 3 更改数据 创建 goods 表 drop table if exists goods; create table goods ( id int(10) primary key auto_increment, name varchar(14) unique, stockdate date )charsetutf8; 1 插入数据 当要插入的数据为日期/时间类型时&#xff0c;如果…