项目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 {
    @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.检测结果

成功!!!

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在vue-admin-template中实现上传头像功能,可以参考vue-element-admin中的实现方法。首先,需要将头像上传组件的代码从vue-element-admin的avatarUpload.vue文件中提取出来。然后,将这些代码添加到vue-admin-template中的form.vue文件中。具体步骤如下: 1. 打开vue-element-admin项目中的avatarUpload.vue文件,查找头像上传组件的代码。 2. 将这些代码复制到vue-admin-template项目中的form.vue文件中的合适位置。 3. 需要注意根据具体需求进行相应的修改,可能需要调整组件的样式、路径或者其他属性。 4. 根据vue-admin-template的文件目录结构和组件引用方式,确保头像上传组件的路径和引用方式正确无误。 5. 保存文件并重新编译运行vue-admin-template项目,确保上传头像功能已经成功添加。 通过以上步骤,你就可以将vue-element-admin中的头像上传功能移植到vue-admin-template中了。请根据具体情况进行调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [vue-admin-template开发(头像上传功能)](https://blog.csdn.net/m0_46991388/article/details/117015841)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值