项目8-头像的上传

news2024/10/4 18:26:30

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 {
    @Autowired
    private 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'),//文件框,里面存的是文件,fileHead
    info = 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.coloradmin.cn/o/1669803.html

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

相关文章

隧道建设的数字眼睛:盾构机实时可视化技术

盾构机可视化技术可以展现盾构机在隧道掘进过程中的各项工作状态。这种技术能够将复杂的数据和参数转化为直观的图像和动画&#xff0c;包括盾构机的推进速度、土压力、刀盘转速和位置信息等关键性能指标。 通过 HT 可视化&#xff0c;工程师可以实时监控盾构机的运行状况&…

网站域名SSL证书怎么获取和安装

一、获取SSL证书 1、选择证书颁发机构&#xff08;CA&#xff09;&#xff1a; 选择一个受信任的SSL证书颁发机构&#xff0c;如JoySSL、Comodo、DigiCert、GlobalSign等。 2、生成证书签名请求&#xff08;CSR&#xff09;&#xff1a; 在您的服务商的网站上生成CSR。CSR中…

云相册APP

简介 一款用于云存照片的app&#xff0c;支持批量上传和下载照片。 平台技术 Android客户端&#xff1a;Kotlin 协程 Retrofit Server服务后端&#xff1a;Java SpringBoot 部署云服务器&#xff1a;华为云耀云服务器L实例 下载网址 小鲸鱼相册 Ps: 由于网站域名备案审核…

学校能源消耗监测管理系统,打造智能监测系统

学校能源消耗监测管理系统是一款针对&#xff0c;水、电、煤、气、热等能源的在线监测、分析与处理的系统&#xff0c;为学校管理者提供全面的能源使用情况&#xff0c;为学校管理工作提供了有力的支持。 为什么要建设能源管理系统&#xff1f; 用能需求增加 随着学校的快速…

星戈瑞SH-PEG3-OH一种多功能生物相容性PEG小分子

SH-PEG3-OH是一种含有硫基&#xff08;-SH&#xff09;、三个乙二醇单元和羟基&#xff08;-OH&#xff09;的小分子化合物。其分子结构中的硫基赋予了其独特的化学反应性&#xff0c;能够与其他含有不饱和键的化合物发生点击化学反应&#xff0c;如迈克尔加成反应等。同时&…

idea无法识别加载pom.xml文件

有时idea无法识别加载pom.xml文件&#xff0c;直接打开pom.xml文件&#xff0c;然后添加到maven就行

重塑产业效率:RFID赋能的智能挂衣系统方案

应用背景 服装生产属于劳动密集型行业&#xff0c;服装生产从原料布料开始到裁剪、打样、缝制、包烫等每个岗位都需要很多工人来作业&#xff0c;是流水式作业。尤其是缝制部门&#xff0c;每台缝纫机或其他设备都有一个工人来完成一道工序&#xff0c;比如前身&#xff0c;后…

【Redis】Redis数据类型

目录 Redis五种数据类型 String字符串类型 字符串中最常使用的命令 List列表类型 List命令 Set与Zset集合类型 Redis五种数据类型 String字符串类型 有效的字符串类型不仅可以是字符&#xff0c;还可以是数字&#xff0c;以上都是有效的字符串类型。 String最大容量为51…

局域网内访问vue3项目|Network: use --host to expose

背景 我希望在相同的局域网内&#xff0c;通过手机访问我在Vue 3项目中展示的效果 遇到的问题 使用Vue CLI的–host选项实现局域网内的应用程序测试 当使用Vue CLI在本地提供服务时&#xff0c;通过使用 --host 选项&#xff0c;你可以指定要公开应用程序的主机。默认情况下&a…

IDEA-控制台日志过滤插件 - Grep Console

IDEA-控制台日志过滤插件 - Grep Console 当idea控制台日志较多时&#xff0c;为了方便查找关键字&#xff0c;使用Grep Console插件&#xff0c;指定控制台中关键字高亮显示 1.安装 2.使用 2.1 高亮显示 控制台中指定颜色高亮显示指定字符 效果: 重启项目后还是会高亮显示 取…

线程的休眠与唤醒

在前面几篇文章中&#xff0c;已经讲过了join()方法的使用&#xff0c;我们知道它是用来控制线程的执行顺序的。 本篇文章中要讲到的wait()方法和notify()方法是用来控制线程执行顺序的&#xff0c;相比于join()&#xff0c;它能够更精确地控制线程之间的执行顺序&#xff0c;…

云仓酒庄携手中视中州国际传媒 开启央视广告战略合作新征程

近日&#xff0c;云仓酒庄与中视中州&#xff08;央视代理机构&#xff09;隆重举行2024-2025年度央视广告战略签约仪式&#xff0c;云仓酒庄副总裁周玄代表云仓酒庄签约。此次合作标志着云仓酒庄在品牌传播和市场营销方面迈出了坚实的一步&#xff0c;将借助央视及多家卫视的强…

LeetCode题目104: 二叉树的最大深度(递归\迭代\层序遍历\尾递归优化\分治法实现 )

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

数据挖掘实战-基于决策树算法构建银行贷款审批预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【系统架构师】-案例篇(一)UML用例图

1、概述 用于表示系统功能需求&#xff0c;以及应用程序与用户或者与其他应用程序之间的交互关系。 2、组成 参与者&#xff08;Actors&#xff09;&#xff1a;与系统交互的用户或其他系统。用一个人形图标表示。用例&#xff08;Use Cases&#xff09;&#xff1a;系统需要…

字符串取第一个空格之后的所有的值字符串取第一个空格之后的第二个元素的值,不要后面的值

当我们后端返回值可能存在某些特定的值或标识导致返回数据不固定且是空格分割时&#xff0c;我们想取出返回字符串中的某个值&#xff0c;就可以参考下面对这个字符串进行操作提取&#xff0c;当然&#xff0c;如果是别的符号分割开的把下面的空格替换即可 1、字符串取第一个空…

IPD推行成功的核心要素(六)ipd总体规划方案设计

IPD指的是集成产品开发&#xff0c;是一种以市场和客户需求为驱动的规划和开发管理体系。其核心来由自市场&#xff0c;研发&#xff0c;制造&#xff0c;服务&#xff0c;采购等跨部门团队来共同管理整个规格和开发过程&#xff0c;从客户需求、产品规划、任务书、概念形成、产…

java -jar提示jar中没有主清单属性(no main manifest attribute)

目录 传送门前言排查原因问题1-》jdk17和jdk8共存导致idea的maven插件识别报错问题2-》pom.xml中mainClass下面的skip属性是罪魁祸首 其他办法&#xff08;修改jar包&#xff09; 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&…

woffice– 内部网和外部网WordPress高端资讯主题

下载地址&#xff1a;https://m.gx.cn/site/3046.html 完全灵活&#xff0c;与最新的WordPress品牌兼容 翻译语言超过15种 使用最新技术设计快速web应用程序 所有这些都以谷歌材料设计为灵感&#xff0c;采用易于定制的设计&#xff0c;给人一种优美的现代感和易于导航的用户…

HCIE学习笔记----OSPF详解

OSPF邻居建立的条件 OSPF建立邻居“41”条件总结 4个一致 一个不一致 1.保证接口的前缀 网络信息一致 2.保证ospf区域号和区域类型一致 3.hello包间隔时间和死亡时间一致 4.认证类型和认证认证信息一致 5.路由器的ID不一致 保证唯一性 一-----OSPF 邻接关系建立过程与状…