基于Vue实现头像选择预览

基于Vue实现头像选择预览

需求是点击头像这一栏可以弹出选择文件的弹出框。

1、首先添加一个input输入框,将其隐藏,设置一个accept属性,说明只选择图片,并且绑定ref属性方便原生dom操作
<input type="file" hidden accept="image/*" ref="fileRef">
2、在头像这一栏中添加一个点击事件,弹出选择文件的弹框
<van-cell 
title="头像" 
is-link 
center 
@click="$refs.fileRef.click()"
>

在这里插入图片描述

3、给input输入框绑定一个原生的change事件,当你选择的文件发生改变时触发。但是不满足需求,我的需求是只要选择了图片就触发,只需在代码中将你选中的图片的value值清空即可。
<input
        type="file"
        hidden
        accept="image/*"
        ref="fileRef"
        @change="checkPic"
      >
checkPic () {
      console.log('选择了图片')
      this.$refs.fileRef.value = ''
    }
4、使用window.URL.createObjectURL()方法得到图片的URL地址,参考如下地址:

https://developer.mozilla.org/zh-CN/docs/Web/API/URL/createObjectURL

const blob =window.URL.createObjectURL(this.$refs.fileRef.files[0])
console.log(blob)
this.imgSrc = blob
5、最后将图片的src属性设置为blob地址即可显示你所选择的图片啦
<img :src="imgSrc" alt="">
### 头像上传功能的技术实现 在现代Web应用开发中,头像上传是一项常见的需求。以下是基于Spring Boot和Vue.js框架的头像上传功能的具体实现方案。 #### 前端部分:Vue.js 实现文件选择预览 在前端层面,可以通过HTML `<input>` 元素来允许用户选择图片文件,并利用File API读取并显示所选图像的缩略图。具体代码如下: ```html <template> <div> <label for="avatar">选择头像:</label> <input type="file" id="avatar" @change="handleFileChange"> <img v-if="previewUrl" :src="previewUrl" alt="Preview" width="100"/> </div> </template> <script> export default { data() { return { previewUrl: null, selectedFile: null }; }, methods: { handleFileChange(event) { const file = event.target.files[0]; if (file) { this.selectedFile = file; this.previewUrl = URL.createObjectURL(file); } } } }; </script> ``` 上述代码实现了当用户选择一张图片时,在页面上实时展示该图片的缩略图[^1]。 #### 后端部分:Spring Boot 接收并存储文件 后端需要提供一个接口用于接收从前端发送过来的文件数据。下面是一个简单的Controller示例,展示了如何处理文件上传请求并将文件保存到服务器上的指定目录。 ```java import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; @RestController @RequestMapping("/api/avatar") public class AvatarUploadController { private static final String UPLOAD_DIR = "/uploads/"; @PostMapping("/upload") public String uploadAvatar(@RequestParam("file") MultipartFile file) throws IOException { if (!file.isEmpty()) { File dir = new File(UPLOAD_DIR); if (!dir.exists()) { dir.mkdirs(); } String fileName = System.currentTimeMillis() + "_" + file.getOriginalFilename(); File dest = new File(dir.getAbsolutePath(), fileName); file.transferTo(dest); // 将上传的文件写入目标位置 return "成功上传:" + fileName; } else { return "未检测到任何文件"; } } } ``` 此段代码定义了一个RESTful服务路径`/api/avatar/upload`,用来接受POST方法提交的数据包中的文件对象,并将其存放到本地磁盘的一个特定文件夹下[^2]。 #### 数据库记录关联 为了能够在后续操作中找到对应的头像文件,通常还需要将文件名或者相对路径存储至数据库表里对应字段之中。假设有一个User实体类,则可以在其中增加一个属性表示用户的头像地址。 ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String email; private String avatarPath; // 新增字段 // Getters and Setters... } ``` 每当完成一次成功的文件上传之后,更新相应的user record即可[^3]。 --- ### 总结 综上所述,通过结合Vue.js强大的组件化特性和Spring Boot简洁高效的API设计能力,可以轻松构建起一套完整的头像上传解决方案。这不仅提升了用户体验,还增强了系统的功能性与可用度[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值