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.mzph.cn/news/683010.shtml

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

相关文章

Windows 安装和连接使用 PgSql数据库

一. PostgreSQL 安装详细步骤 下载地址&#xff1a;https://www.enterprisedb.com/postgresql-tutorial-resources-training-1?uuidd732dc13-c15a-484b-b783-307823940a11&campaignIdProduct_Trial_PostgreSQL_16 1. 双击打开安装包 2. 选择安装目录 3. 选择安装组件 4.…

windows10系统转换成为window7s出现蓝屏错误ax000000A5

状况的描述&#xff1a; 由于电脑的基础性能有一些不匹配&#xff0c;想把windows10系统转换成为windows7的系统进行处理&#xff0c;利用widowspe的装机系统对其进行处理&#xff0c;但是对其进行相关的安装&#xff0c;目前在网络上搜索的相关文章分析的原因&#xff1a; 原…

蓝桥杯:C++排序

排序 排序和排列是算法题目常见的基本算法。几乎每次蓝桥杯软件类大赛都有题目会用到排序或排列。常见的排序算法如下。 第(3)种排序算法不是基于比较的&#xff0c;而是对数值按位划分&#xff0c;按照以空间换取时间的思路来排序。看起来它们的复杂度更好&#xff0c;但实际…

政安晨:梯度与导数~示例演绎《机器学习·神经网络》的高阶理解

这篇文章确实需要一定的数学基础&#xff0c;第一次接触的小伙伴可以先看一下我示例演绎这个主题的前两篇文章&#xff1a; 示例演绎机器学习中&#xff08;深度学习&#xff09;神经网络的数学基础——快速理解核心概念&#xff08;一&#xff09;&#xff1a; 政安晨&#…

蓝桥杯嵌入式学习记录——按键的使用

目录 一、按键原理简介 二、cubeMX的配置 三、按键的短按代码 四、按键的长按代码 一、按键原理简介 在STM32中&#xff0c;按键连接通常使用GPIO&#xff08;通用输入/输出&#xff09;端口来实现。当按键未被按下时&#xff0c;GPIO端口处于高电平状态&#xff08;即1&am…

springboot188基于spring boot的校园商铺管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

高德地图上绘制热力图的方法

百度地图和高德地图的JavaScript API都提供了热力图的绘制方法&#xff0c;都是将热力图作为新的图层&#xff0c;叠加到地图上。但是百度地图的经纬度体系与我们的经纬度存在偏差&#xff0c;高德的与我们相符&#xff0c;应当使用高德地图JavaScript API。 因为是JavaScript…

COM初体验——新建文档并写入内容。

我想在程序里和Word交互。老师跟我说不要学COM&#xff0c;因为它已经过时了。但是我不想再把代码移植到C#上面&#xff0c;然后用VSTO——已经用了std::unordered_set&#xff01;因为我使用了Copilot&#xff0c;结合我的思考&#xff0c;写了下面的代码&#xff1a; #impor…

【Langchain Agent研究】SalesGPT项目介绍(四)

【Langchain Agent研究】SalesGPT项目介绍&#xff08;三&#xff09;-CSDN博客 github地址&#xff1a;GitHub - jerry1900/SalesGPT: Context-aware AI Sales Agent to automate sales outreach. 上节课&#xff0c;我们主要介绍了SalesGPT的类属性和它最重要的类方法f…

【教学类-47-01】20240206UIBOT+IDM下载儿童古诗+修改文件名

背景需求&#xff1a; 去年12月&#xff0c;我去了其他幼儿园参观&#xff0c;这是一个传统文化德育教育特色的学校&#xff0c;在“古典集市”展示活动中&#xff0c;小班中班大班孩子共同现场念诵《元日》《静夜思》包含了演唱版本和儿歌念诵版本。 我马上也要当班主任了&a…

微信小程序开发学习笔记《17》uni-app框架-tabBar

微信小程序开发学习笔记《17》uni-app框架-tabBar 博主正在学习微信小程序开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、创建tabBar分支 运行如下的命令&#xff0c;基于master分支在本地创建tabBar子分支&#x…

Netty Review - 服务端channel注册流程源码解析

文章目录 PreNetty主从Reactor线程模型服务端channel注册流程源码解读入口 serverBootstrap.bind(port)执行队列中的任务 &#xff1a; AbstractUnsafe#register0注册 doRegister() 源码流程图 Pre Netty Review - ServerBootstrap源码解析 Netty Review - NioServerSocketCh…

TCP高频知识点

本篇文章主要讲述一下在面试过程中TCP的高频知识点 1.TCP三次握手流程图: 客户端发送一个SYN&#xff08;同步&#xff09;报文段给服务器&#xff0c;选择一个初始序列号&#xff0c;并设置SYN标志位为1。服务器接收到客户端的SYN报文段后&#xff0c;回复一个ACK&#xff08…

OJ刷题:杨氏矩阵【建议收藏】

看见这个题目&#xff0c;很多人的第一反应是遍历整个数组查找数字&#xff0c;但是这种方法不仅效率低&#xff0c;而且远远不能满足题目要求。下面介绍一种高效的查找方法&#xff1a; 代码实现&#xff1a; #include <stdio.h>int Yang_Find_Num(int arr[][3], int …

steam游戏搬砖项目靠谱吗?有没有风险?

作为一款fps射击游戏&#xff0c;csgo在近几年可谓是火出圈&#xff0c;作为一款全球竞技游戏&#xff0c;深受玩家喜爱追捧&#xff0c;玩家追求的就是公平公正&#xff0c;各凭本事&#xff0c;像其他游戏可能还会有皮肤等装备属性加成&#xff0c;在csgo里面是不存在的。 纯…

K8sGPT 的使用

K8sGPT 介绍 k8sgpt 是一个扫描 Kubernetes 集群、诊断和分类问题的工具。它将 SRE 经验编入其分析器中&#xff0c;并帮助提取最相关的信息&#xff0c;通过人工智能来丰富它。它还可以与 OpenAI、Azure、Cohere、Amazon Bedrock 和本地模型结合使用。 K8sGPT Github 地址 …

Vue插槽

Vue插槽 一、插槽-默认插槽1.作用2.需求3.问题4.插槽的基本语法5.代码示例6.总结 二、插槽-后备内容&#xff08;默认值&#xff09;1.问题2.插槽的后备内容3.语法4.效果5.代码示例 三、插槽-具名插槽1.需求2.具名插槽语法3.v-slot的简写4.代码示例5.总结 四、作用域插槽1.插槽…

安卓价值1-如何在电脑上运行ADB

ADB&#xff08;Android Debug Bridge&#xff09;是Android平台的调试工具&#xff0c;它是一个命令行工具&#xff0c;用于与连接到计算机的Android设备进行通信和控制。ADB提供了一系列命令&#xff0c;允许开发人员执行各种操作&#xff0c;包括但不限于&#xff1a; 1. 安…

在python中JSON数据格式的使用

什么是JSON&#xff1f; JSON是一种数据格式&#xff0c;由美国程序设计师DouglasCrockford创建的&#xff0c;JSON全名是JavaScript Object Notation,由JSON英文全文字义我们可以推敲JSON的缘由&#xff0c;最初是为JavaScript开发的。这种数据格式由于简单好用被大量应用在We…

DS Wannabe之5-AM Project: DS 30day int prep day15

Q1. What is Autoencoder? 自编码器是什么&#xff1f; 自编码器是一种特殊类型的神经网络&#xff0c;它通过无监督学习尝试复现其输入数据。它通常包含两部分&#xff1a;编码器和解码器。编码器压缩输入数据成为一个低维度的中间表示&#xff0c;解码器则从这个中间表示重…