项目8-头像的上传

js实现头像上传并且预览图片功能以及提交 - 掘金 (juejin.cn)

我们简单建立一个表

1.前端知识储备

1.1 addClass的使用

1.基本语法

addClass() 方法向被选元素添加一个或多个类。

该方法不会移除已存在的 class 属性,仅仅添加一个或多个 class 属性。

提示:如需添加多个类,请使用空格分隔类名。

$(selector).addClass(class)

 W3School TIY Editor

 2.实例分析

点击按钮后

$(document).ready(function(){$("button").click(function(){$("p:first").removeClass("intro").addClass('main');});
}); 

将class删除替换为新的class,随之改变了css的样式

1.2 innerHTML的使用方式 

HTML DOM innerHTML 属性 | 菜鸟教程 (runoob.com)

1.实例分析

点击按钮后

1.3 addEventListener() 方法 

HTML DOM addEventListener() 方法 | 菜鸟教程 (runoob.com)

element.addEventListener(event, function, useCapture)

1.实例分析

一旦执行了该元素的点击操作,就会调用该函数。

1.4 HTML的change事件 

HTML 元素:change 事件 - Web API | MDN (mozilla.org)

当用户更改 <input>、<select> 和 <textarea> 元素的值时,change 事件在这些元素上触发。和 input 事件不同的是,并不是每次元素的 value 改变时都会触发 change 事件。

2.图片的上传

//需要将图片的地址和信息保存到数据库

//同时需要将图片保存在本地存储文件中

//用户的头像可以是一样的

2.1 后端代码

1.分层架构

2.model

@Data
public class Pic {private Integer userId;private String picname;private String path;
}

注意:此处需要与建立的数据库相对应

-- 数据库
drop database if exists `updatepic`;
create database if not exists `updatepic` character set utf8;
-- 使用数据库
use `updatepic`;DROP TABLE IF EXISTS `pic`;
CREATE TABLE `user` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`picname` varchar(200) NOT NULL,
`path` varchar(255) NOT NULL
);

3.mapper

@Mapper
public interface PicMapper {@Insert("insert  into user(picname,path) values (#{picname},#{path})")Integer insertPic(String picname,String path);
}

4.前后端交互

@RestController
@RequestMapping("/upload")
public class controller {@Autowiredprivate PicMapper picMapper;@RequestMapping("/pic")public Boolean insertPic(@RequestParam("file") MultipartFile file){//获取文件名String picname=file.getOriginalFilename();//指定保存的路径String path="F:/pic/"+picname;//保存文件到本地try {file.transferTo(new File(path));picMapper.insertPic(picname,path);return true;} catch (IOException e) {e.printStackTrace();return false;}}
}

3.前端代码

参考此代码,进行修改。

JS头像的预览和上传 - 牛有肉 - 博客园 (cnblogs.com)

1.upload.html

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>图片上传</title><link rel="stylesheet" href="css/upload.css">
</head>
<body><div class="reHead"><P class="content-format">头像支持jpg、png、jpeg格式,文件大小最大不能超过100M</P><div class="content"><!-- 表单禁止提交 --><form method="post" onsubmit="return false" enctype="multipart/form-data" id="file_upload" class="headForm"><div id="test-image-preview" class="iconfont icon-bianjitouxiang"><input type="file" name="test" id="test-image-file" class="fileHead" accept="image/gif, image/jpeg, image/png, image/jpg" multiple="multiple"></div><div class="headMain"><span class="file">上传文件</span><p id="test-file-info" class="fileName"></p></div></form></div><div class="but"><!-- <button type="submit" class=" orangeHead" id="upImgSub">保存</button> --><input type="button" class=" orangeHead" value="保存" id="upImgSub" onclick="submitmessage()"/></div></div></body>
<script type="text/javascript" src="js/jquery-3.1.1.min.js"></script>   
<script type="text/javascript" src="js/upload.js"></script>    
</html>

2.css 

body{font-size: 12px;
}
.reHead{margin: 15px 4%; 
}
.headForm{text-align: center;padding: 40px 0 70px 0;
}
#test-image-preview {position: relative;display: inline-block;width: 100px;height: 100px;border-radius: 50px;background: #F5F5F5;color: #fff;font-size: 60px;text-align: center;line-height: 100px;background-size: contain;background-repeat: no-repeat;background-position: center center;margin-bottom: 26px;
}
.fileHead{position: absolute;width: 100px;height: 100px;right: 0;top: 0;opacity: 0;
}
.content-format {font-size: 12px;font-weight: 400;color: rgba(153, 153, 153, 1);
}
.headMain{height: 40px;
}
.file {position: relative;background: #fff;color: #F39800;font-weight:800;
}
.file input {position: absolute;font-size: 12px;right: 0;top: 0;opacity: 0;
}
.fileName {line-height: 28px;font-size: 12px;font-weight: 400;color: rgba(51, 51, 51, 1);
}
.but{text-align: center;
}
.orangeHead{width: 40%;height: 40px;background: #f60;border: none;
}
.orangeHead{color: #fff;
}

3.js

var fileInput = document.getElementById('test-image-file'),//文件框,里面存的是文件,fileHeadinfo = document.getElementById('test-file-info'),//文件名preview = document.getElementById('test-image-preview');//文件框,头像显示界面dataBase64 = '',preview.style.backgroundImage = 'url(img/个人头像.png)';    //默认显示的图片// 监听change事件:fileInput.addEventListener('change', upImg);// 头像上传逻辑函数
function upImg() {preview.style.backgroundImage = '';       // 清除背景图片if (!fileInput.value) {     // 检查文件是否选择:(此时文件中什么都没选择)$('#test-image-preview').addClass('icon-bianjitouxiang');info.innerHTML = '没有选择文件';} else {$('#test-image-preview').removeClass('icon-bianjitouxiang');info.innerHTML = '';//此时上传文件成功}var file = fileInput.files[0];    // 获取File引用var size = file.size;if (size >= 100 * 1024 * 1024) {     //判断文件大小info.innerHTML = '文件大于100兆不行!';preview.style.backgroundImage = '';$('#test-image-preview').addClass('icon-bianjitouxiang');return false;}if (file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') {    // 获取File信息:info.innerHTML = '不是有效的图片文件!';preview.style.backgroundImage = '';$('#test-image-preview').addClass('icon-bianjitouxiang');return;}// 读取文件:var reader = new FileReader();reader.onload = function (e) {dataBase64 = e.target.result;     // 'data:image/jpeg;base64,/9j/4AAQSk...(base64编码)...}'        preview.style.backgroundImage = 'url(' + dataBase64 + ') ';preview.style.backgroundRepeat = 'no-repeat';preview.style.backgroundSize = ' 100% 100%';};// 以DataURL的形式读取文件:reader.readAsDataURL(file);// console.log(file);
}function submitmessage(){var formData = new FormData();formData.append('file', $('.fileHead')[0].files[0]);alert("进入")// var file = fileInput.files[0];$.ajax({type: 'post',url: '/upload/pic',processData: false,async: false,contentType: false,cache: false,// 使用同步操作timeout: 50000, //超时时间:50秒data: formData,// async: false,     //  当async属性的值为false时是同步的,Ajax请求将整个浏览器锁死,只有ajax请求返回结果后,才执行ajax后面的alert语句。    (虽然可行,但是不推荐) // cache: false,// processData: false,// contentType: false,success:function (res) {    // 返回成功if(res=== true){alert("上传头像成功")          // 上传成功}else{alert("上传头像失败")          // 上传失败}},error: function () {alert("接口错误");       // 返回失败}})
}

4.检测结果

成功!!!

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

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

相关文章

Pathlib,一个不怕迷路的 Python 向导

大家好&#xff01;我是爱摸鱼的小鸿&#xff0c;关注我&#xff0c;收看每期的编程干货。 一个简单的库&#xff0c;也许能够开启我们的智慧之门&#xff0c; 一个普通的方法&#xff0c;也许能在危急时刻挽救我们于水深火热&#xff0c; 一个新颖的思维方式&#xff0c;也许能…

全网最全的基于电机控制的38类simulink仿真全家桶----新手大礼包

整理了基于电机的38种simulink仿真全家桶&#xff0c;包含多种资料&#xff0c;类型齐全十分适合新手学习使用。包括但是不局限于以下&#xff1a; 1、基于多电平逆变器的无刷直流电机驱动simulink仿真 2、基于负载转矩的感应电机速度控制simulink仿真 3、基于滑膜观测器的永…

OpenAI GPT-4o - 介绍

本文翻译整理自&#xff1a; Hello GPT-4o https://openai.com/index/hello-gpt-4o/ 文章目录 一、关于 GPT-4o二、模型能力三、能力探索四、模型评估1、文本评价2、音频 ASR 性能3、音频翻译性能4、M3Exam 零样本结果5、视觉理解评估6、语言 tokenization 六、模型安全性和局限…

【汇编语言】多文件组织

【汇编语言】多文件组织 文章目录 【汇编语言】多文件组织前言一、8086拓展1.子程序的另外一种写法2.程序的多文件组织 总结 前言 本篇文章将讲到子程序的另一种写法&#xff0c;以及程序的多文件组织。 一、8086拓展 1.子程序的另外一种写法 初始的程序 在这里我们对比一下…

用SwitchHosts模拟本地域名解析访问

一.用SwitchHosts模拟本地域名解析访问 1.下载地址 https://download.csdn.net/download/jinhuding/89313168 2.使用截图

20240511每日运维----聊聊nignx改配置所有的nginx改完unknow

1、改配置所有的nginx改完unknow src/core/nginx.h src/http/ngx_http_header_filter_module.c src/http/ngx_http_special_response.c src/http/v2/ngx_http_v2_filter_module.c 2、make 3、去objs里面把nginx文件替换过去sbin/nginx

地点导航图片怎么做?商场导航图用什么做的?

上海懒图科技以各类商场导购&可视化管理需求为出发点&#xff0c;量身定制专属商场地图&#xff0c;用户自主即可简易快速完成制图并实现应用&#xff0c;地图数据的制作及编辑维护全可视化&#xff0c;通过拖、拉、拽即可快速完成&#xff0c;零地图编辑技能基础要求。绘制…

MySQL深入理解MVCC机制(详解)

深入理解MVCC 1、MVCC定义 MVCC:Multi-Version Concurrency Control&#xff0c;多版本并发控制机制。 在mysql中&#xff0c;为了满足事务的四大特性之一的隔离性&#xff0c;就是当前事务中的查询的数据不受其他事务的增删改操作的影响&#xff0c;因此mysql主要是通过这个…

Lora训练Windows[笔记]

一. 使用kohya_ss的GUI版本&#xff08;https://github.com/bmaltais/kohya_ss.git&#xff09; 这个版本跟stable-diffusion-webui的界面很像&#xff0c;只不过是训练模型专用而已&#xff0c;打开的端口同样是7860。 1.双击setup.bat,选择1安装好xformers,pytorch等和cuda…

malloc_consolidate

此文章用于详细介绍malloc_consolidate。 众所周知&#xff0c;fastbin一般是不能合并&#xff0c;但在malloc_consolidate中是个例外。 1.触发机制 首先构造这样的堆块结构 一个0x40的堆块在fastbin中&#xff0c;一个0x110的堆块在unbin中 随后我们尝试分配一个0x300的堆…

[ROS 系列学习教程] 建模与仿真 - URDF 建模实践

ROS 系列学习教程(总目录) 本文目录 一、机器人结构组成二、新建功能包三、编写launch文件四、创建底盘五、添加轮子六、添加其他部件七、解决部分实体位于地面以下的问题 前文介绍了URDF建模与URDF语法&#xff0c;接下来介绍怎么使用URDF从零构建一个机器人模型并在rviz中显示…

Linux网络编程——HTTP协议的理解与运用

目录 前言 一、认识URL 二、认识HTTP样例 三、HTTP的报头内容 1.url 2. Content-Type 3.Method 方法 1.GET方法 2.POST方法 4、状态码 5.cookie和session 前言 我们知道&#xff0c;协议就是一种约定&#xff0c;客户端与服务端统一的用这种约定进行传输数据。我们…

K210开发板MicroPython开发环境搭建

一、安装CanMV IDE开发软件 1、进入如下连接 https://developer.canaan-creative.com/resource 2、点击下载 3、下一步 4、修改安装路径&#xff0c;下一步 5、接受许可下一步 6、下一步 7、安装 8、完成 9、区域①菜单栏&#xff1a;操作文件&#xff0c;使用工具等。…

Hadoop3:HDFS副本节点选择逻辑讲解

一、副本节点选择&#xff08;机架感知&#xff09; 说明 第一个副本&#xff0c;因为我们的client可能是web页&#xff0c;也可能是shell终端。 如果是web页&#xff0c;则随机选取一个节点&#xff0c;如果是shell终端&#xff0c;则选择当前shell终端所在的节点。 节点距离最…

Spring编程使用DDD的小把戏

场景 现在流行充血领域层&#xff0c;在原本只存储对象的java类中&#xff0c;增加一些方法去替代原本写在service层的crud&#xff0c; 但是例如service这种一般都是托管给spring的&#xff0c;我们使用的ORM也都托管给spring&#xff0c;这样方便在service层调用mybatis的m…

计网面试干货---带你梳理常考的面试题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、HTTP和HTTPS的区别 1.安全性&#xff1a;HTTPS通过SSL/TLS协议对数据进行加密处理&#xff0c;有效防止数据在传输过…

函数栈帧的创建和销毁(详细理解)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;c语言课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 问题&#xff1a; 1.ebp&#xff0c;esp两个寄存器用来维护函数栈帧 2.main函数也一个函数&#…

Darknet+ros+realsenseD435i+yolo(ubuntu20.04)

一、下载Darknet_ros mkidr -p yolo_ws/src cd yolo_ws/src git clone --recursive https://github.com/leggedrobotics/darknet_ros.git #因为这样克隆的darknet文件夹是空的&#xff0c;将darknet_ros中的darknet的文件替换成如下 cd darknet_ros git clone https://github.…

2024年湖北省安全员-B证证模拟考试题库及湖北省安全员-B证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年湖北省安全员-B证证模拟考试题库及湖北省安全员-B证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;湖北省安全员-B证证模拟考试题库是根据湖北省安全员-B证最新版教材&#xff0c;湖北省安全员-B证大…

错误: 找不到或无法加载主类问题(已解决)

今天在虚拟机中安装了idea2023.2的版本&#xff0c;运行代码时发现错误找不到主类&#xff01; 直接说结论&#xff1a; 我先clean了一下target&#xff0c;然后重新build&#xff0c;发现maven报错了&#xff0c;idea2023.2默认使用了内置的maven&#xff0c;然后我切换了一下…