【PHP开发工程师详细讲解分析】——网站注册账号(头像的上传操作),让自己喜欢的头像更换畅通无阻

在这里插入图片描述


👨‍💻个人主页:@开发者-曼亿点

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 曼亿点 原创

👨‍💻 收录于专栏:PHP程序开发

🅰

在这里插入图片描述


文章目录

    • 🅰
    • 前言
    • 🎶一、 创建文件上传表单以及数据库和视图操作
      • 🐤(1)对数据库中添加字段
      • 🐤(2)创建添加数据的表单和路由
      • 🐤(3)创建视图并添加csrf token
    • 🎶二、处理文件上传请求
    • 🎶三、文件验证
    • 🎶四、存储上传的文件
        • 结束语🥇


前言

  文件上传是许多 Web 应用程序中常见的功能之一,它允许用户将文件从本地计算机上传到服务器上。在使用 Laravel 框架构建 Web 应用程序时,实现文件上传功能非常简单且方便。Laravel 提供了强大的文件上传功能,使开发人员能够轻松地处理文件上传,并且提供了良好的安全性和便利性。

  本教程将向您展示如何使用 Laravel 框架实现文件上传操作。我们将从设置环境开始,逐步介绍如何创建文件上传表单、处理文件上传请求,并对上传的文件进行验证和存储。同时,我们还将探讨如何处理上传文件的各种情况,如文件类型验证、文件大小限制等。

通过本教程,您将学习到以下内容:

  • 如何配置 Laravel 以允许文件上传;
  • 如何创建包含文件上传字段的表单;
  • 如何处理上传的文件并进行验证;
  • 如何将上传的文件存储到服务器;
  • 如何处理文件上传过程中可能出现的异常情况。

  无论您是初学者还是有经验的 Laravel 开发人员,本教程都将为您提供足够的信息和指导,帮助您轻松地实现文件上传功能并加深对 Laravel 框架的理解。


🎶一、 创建文件上传表单以及数据库和视图操作


🐤(1)对数据库中添加字段

alter table 'member'
add column'avatat' varchar(100) character set utf8_general_ci NOT NULL
after 'email'

如果代码不能添加手动添加即可,效果一致

效果图如下:
在这里插入图片描述

🐤(2)创建添加数据的表单和路由

1.添加路由:/home/wj
在这里插入图片描述

2.视图的方式法
在这里插入图片描述

3.表单代码图:

<!DOCTYPE html>
<html lang="en">
<head>    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
	<link rel="stylesheet" href="css/weui.css"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文件上传</title>
</head>
<body>
	<form method="post" action="" enctype="multipart/form-data">
<p>姓名:<input type="text" name='name' value="" placeholder="请输入名字"></p>
<p>年龄:<input type="text" name='age' value="" placeholder="请输入年龄"></p>
<p>邮箱:<input type="text" name='email' value="" placeholder="请输入邮箱"></p>
<p>头像:<input type="file" name='avatar'></p>
	<input type="submit" value="提交">
</form>
</body>
</html>

表单效果图如下:
在这里插入图片描述

🐤(3)创建视图并添加csrf token

回顾:要想表单能够上传(此处不考虑异步方式),则表单应该具备哪些要求?
  a.具有from标签,method必须为post,必须具备enctype属性;
  b.至少有一个input类型为file类型;
  c.得具备一个提交按钮;

在这里插入图片描述


🎶二、处理文件上传请求


1.接收上传的文件:
  当用户通过表单提交文件上传请求时,Laravel 控制器负责接收这些请求。您可以在控制器方法中使用请求对象(Request Object)来获取上传的文件数据。通常,上传的文件会作为请求对象的一个属性,您可以通过 $request->file(‘file’) 方法来访问上传的文件。

2.验证上传的文件:
  一旦接收到上传的文件,通常会进行一些验证以确保上传的文件符合预期。例如,您可以验证文件的类型、大小、扩展名等。Laravel 提供了方便的文件验证功能,您可以使用 Validator 类来轻松实现文件验证。

3.保存上传的文件:
  一旦文件上传并通过验证,您可以将文件保存到服务器上的指定位置。通常情况下,您会将上传的文件保存在存储目录中,例如 storage/app/public 目录下。您可以使用 Laravel 提供的文件存储功能来轻松地保存文件,例如使用 store() 方法。

4.返回响应:
  处理文件上传请求后,通常会向用户返回适当的响应,以告知用户文件上传的结果。这可能包括成功上传的消息、错误消息或者其他相关信息。您可以在控制器方法中根据上传结果返回不同的响应。

if($request->post())
    {
    //使用post提交方式进行操作
}

🎶三、文件验证


1.文件类型验证:
  Laravel 提供了丰富的文件类型验证功能,您可以轻松验证上传的文件类型是否符合预期。通过在控制器中使用 Validator 类的规则,如 mimes 规则,可以指定允许上传的文件类型,以确保用户只能上传指定类型的文件。例如,您可以验证文件是否是图片、视频、文档等。

2.文件大小验证:
  除了文件类型之外,有时还需要验证上传文件的大小是否符合预期。Laravel 允许您指定文件的最大大小,以限制用户上传过大的文件。通过在验证规则中使用 max 规则,您可以指定文件的最大大小,确保上传的文件不超过指定的大小限制。

3.文件名验证:
  在某些情况下,您可能需要验证上传文件的文件名是否符合特定的格式或规则。例如,您可以验证文件名是否包含特定的字符、长度是否符合要求等。Laravel 提供了灵活的验证规则,可以帮助您实现对文件名的验证。
在这里插入图片描述
更多的方法请访问:https://laravelacademy.org/post/22371

思路:
a.先去判断文件是否正常存在
b.获取相关的信息(可选)
c.保存文件(其实就是移动文件到新的目录)


🎶四、存储上传的文件


1.指定存储位置:
  在存储上传的文件之前,首先需要确定文件应该存储在哪个位置。Laravel 提供了一个灵活的文件存储系统,允许您定义多个存储磁盘,并根据需求将文件保存到不同的存储位置。您可以配置 filesystems.php 配置文件中的磁盘设置,以指定文件的存储位置。

2.保存文件:
  一旦确定了文件的存储位置,您可以使用 Laravel 提供的文件存储 API 轻松地将上传的文件保存到指定的存储位置。通过使用 Storage facade 或 Storage 实例的方法,如 put、store 等,您可以轻松地保存文件到指定的磁盘和路径。

use Illuminate\Support\Facades\Storage;
// 保存文件到 “public” 磁盘的 “images” 目录
Storage::disk(‘public’)->put(‘images/filename.jpg’, $fileContents);

3.生成文件路径和URL:
  存储文件后,通常需要获取文件的路径或 URL,以便后续访问或显示文件。Laravel 提供了方便的方法来生成文件的访问路径和 URL,例如 Storage::url 方法可以为存储的文件生成公开可访问的 URL。

$url = Storage::url(‘images/filename.jpg’);

4.处理文件系统驱动:
  Laravel 支持多种文件系统驱动,包括本地文件系统、Amazon S3、Rackspace 等。这使得您可以根据应用程序的需求选择合适的文件存储解决方案,并轻松地切换不同的文件系统驱动。

(1)创建上传文件保存路径
在这里插入图片描述

关于项目中使用路径的说明:
如果路径是给PHP代码使用的,则路径建议“./”形式;如果路径是给浏览器使用的则建议使用"/"形式。

代码实现以及代码解析:

public function wj(Request $request)
{
   if($request->post())
   {
       //上传文件
       //判断文件是否正确
       if($request->hasFile('avatar')&& $request -> file('avatar') -> isValid())
       {
      //获取文件的原始内容
      //getClientOriginalName原始的名称
    // dd($request->file('avatar') ->getClientOriginalName());
    //time()时间戳   后缀
    $path=md5(time() . rand(100000,999999)). '.' .$request->file('avatar')->getClientOriginalExtension();
     $request->file('avatar') ->move('./uploads',$path);
     //获取全部的数据
     $data=$request->all();
     //将路径添加到数组中
     $data['avatar']='./uploads/'. $path;
     $db=DB::table('member');
           $rst=$db->insert(
           [
           'name' => $data['name'],
           'age' => $data['age'],
           'email' => $data['email'],
           'avatar' => $data['avatar'],
           ]
           );
           var_dump($rst);
                   }
   }else
   {
       //展示一个视图
       return view("home/wj");
   }

以将文件传输到文件夹中:
在这里插入图片描述
将图片以导入数据库:
在这里插入图片描述

最后可以通过查询将图片展现到视图上,便可以实现头像的显示

结束语🥇

以上就是PHP程序设计
持续更新PHP程序设计教程,欢迎大家订阅系列专栏🔥PHP程序开发你们的支持就是曼亿点创作的动力💖💖💖
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/569037.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

便携式应急指挥箱规格参数

概况: 微缩型的无线视频音频传输的机动挥所。体积小、重量轻、公配电方便、携带便携、功能齐全。可进行单兵作战&#xff0c;通过此无线音频视频传输的指挥箱能完成现场图像、语音、数据的采集等功能&#xff0c;可以通过5G/4G/WIFI等多种无线网络完成传输的需求&#xff0c;或…

计算机网络相关知识总结

一、概述 计算机网络可以极大扩展计算机系统的功能机器应用范围&#xff0c;提高可靠性&#xff0c;在为用户提供放方便的同时&#xff0c;减少了整体系统费用&#xff0c;提高性价比。 计算机网络的功能主要有&#xff1a;1. 数据共享&#xff1b;2. 资源共享&#xff1b;3. 管…

echart坑

echart坑 原因&#xff1a; 引用了echarts里面的init方法显示没有定义 解决的方法 将import echarts from echarts 的引入方式改为&#xff1a; import * as echarts from echarts

【vue2】实现微信截图(复制图片)在项目内可粘贴

需求 后台管理在上传图片地方需要将复制的图片粘贴上传 一、添加事件 在原有上传组件的基础上添加 paste事件 二、方法 onPaste(e) {const items (e.clipboardData || window.clipboardData).items;let blob null;for (let i 0; i < items.length; i) {if (items[i].ty…

学习Rust的第10天:枚举和模式匹配

今天我们来看看一个类似的概念 enums 。 Enums: We saw that in Rust, enums are data types that list possible values, giving a simple and type-safe mechanism to describe alternatives. We looked at how to create enums and use them to represent similar possibili…

Dropout Feature Ranking for Deep Learning Models

摘要 深度神经网络( deep neural networks&#xff0c;DNNs )在多个领域取得了最新的研究成果。不幸的是&#xff0c;DNNs因其不可解释性而臭名昭著&#xff0c;从而限制了其在生物和医疗保健等假说驱动领域的适用性。此外&#xff0c;在资源受限的环境下&#xff0c;设计依赖…

沐风老师3dMax万有引力插件ToGround使用方法详解

3dMax万有引力插件ToGround使用教程 3dMax万有引力插件ToGround&#xff0c;用于在复杂地形&#xff08;曲面&#xff09;上将对象放置在适当高度的实用工具。例如&#xff1a;将大量的人、植物和汽车快速放置在一个街道、公园和小跑道高度不同的区域尤其有用。 【适用版本】 …

android openGL ES详解

1、渲染线程与主线程的通信 两个线程之间的通信可以用如下方法: 在主线程中的 GLSurfaceView 实例可以调用 queueEvent( &#xff09;方法传递一个 Runnable 给后台渲染线程&#xff0c;渲染线程可以调用 Activity 的 runOnUIThread()来传递事件 (event) 给主线程。 2、顶点…

SQLite FTS3 和 FTS4 扩展(三十二)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite 的命令行 Shell(三十一&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 概述 FTS3 和 FTS4 是 SQLite 虚拟表模块&#xff0c;允许用户执行 对一组文档进行全文搜索。最常见&#xff08;和最有效…

Linux之yum和vim的使用

一、yum的使用 yum 后面跟install要安装的文件名&#xff1a; 若你要安装的文件已经存在&#xff0c;则会出现&#xff1a; 要删除文件&#xff1a; yum remore文件名即可删除 在我们安装完lrzsz之后&#xff0c;可以用rz指令和sz指令&#xff1a; rz指令可以从window窗口中…

开源模型应用落地-chatglm3-6b-集成langchain(十)

一、前言 langchain框架调用本地模型&#xff0c;使得用户可以直接提出问题或发送指令&#xff0c;而无需担心具体的步骤或流程。通过LangChain和chatglm3-6b模型的整合&#xff0c;可以更好地处理对话&#xff0c;提供更智能、更准确的响应&#xff0c;从而提高对话系统的性能…

LoggerFactory is not a Logback

错误信息 LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.SimpleLoggerFactory loaded from file:/D:/maven/repository/org/slf4j/slf4j-simple/1.7.26/slf…

easyx库的学习(鼠标信息)

前言 本次博客是作为介绍easyx库的使用&#xff0c;最好是直接代码打到底&#xff0c;然后看效果即可 代码 int main() {initgraph(640, 480, EX_SHOWCONSOLE|EX_DBLCLKS);setbkcolor(RGB(231, 114, 227));cleardevice();//定义消息结构体ExMessage msg { 0 };//获取消息wh…

SpringBoot+Vue开发记录(三)

说明&#xff1a;本篇文章的主要内容为需求分析。需求分析这一部分很重要&#xff0c;也稍微有点子难搞&#xff0c;所以本篇文章里的有些内容会有失偏颇。 一、准备步骤 我打算做一个刷题项目&#xff0c;但是具体这个项目该怎么做&#xff0c;我是一头雾水。 所以就要先进行…

OPTEE的FTRACE跟踪技术实战

【按语】:对于排除性能问题或优化代码来说,有没有更好的工具可以使用?FTRACE记录了对函数的所有调用,并包含计时信息。因此,对于排除性能问题或优化代码来说,它是一个很有价值的工具。本博客描述如何使用FTRACE为TA生成函数调用图。相关知识点介绍,请参考OPTEE Ftrace函…

k8s calico vxlan式详解

之前的文章讲了k8s ipip模式的使用以及流量路径&#xff0c;本篇文章主要是来讲解一下vxlan 模式下pod 流量是如何通信的。 一、ipip模式转vxlan 修改calico backend参数 将calico_backend参数由bird设置为vxlan,因为vxlan部署不使用bgp 修改calico controllers的configmap…

第100+6步 ChatGPT文献复现:ARIMAX预测新冠

基于WIN10的64位系统演示 一、写在前面 我们继续来解读ARIMAX模型文章&#xff0c;这一轮带来的是&#xff1a; 《PLoS One》杂志的2022年一篇题目为《A data-driven eXtreme gradient boosting machine learning model to predict COVID-19 transmission with meteorologic…

树莓派驱动开发----iic驱动oled屏幕篇

水一期吧&#xff0c;上效果 有点模糊&#xff0c;我直接说吧&#xff0c;修改设备树&#xff0c;iic1&#xff0c;地址0x3c&#xff0c;然后编写驱动文件&#xff0c;app文件&#xff0c;挂载驱动模块后在终端输入 /*******************************************************…

Appium一本通

Appium介绍 概念&#xff1a;Appium是一个移动App(手机应用)自动化工具。 用途&#xff1a;重复性任务、爬虫、自动化测试。 特点&#xff1a;开源免费、多平台支持(ios\android)、多类型支持(native\webview)、类selenium支持多语言(java\python\js\ruby) Appium原理 三个主…

基于小程序实现的查寝打卡系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;ssm 【…