springboot + uniapp 头像上传功能及样式模版

springboot + uniapp 头像上传和预览功能及样式模版

该头像上传使用 uni.chooseImage 方法从本地相册选择图片或使用相机拍照。

再通过 uni.uploadFile 将本地资源上传到服务器。具体使用方法请参考 uniapp 官网 API

以下是前端效果图:

在这里插入图片描述

上传之后效果

在这里插入图片描述

点击头像预览效果

在这里插入图片描述

前端代码

确保点击图片仅触发预览功能而不触发 avatarSwitch 函数,可以通过在图片元素上使用 @click.stop 修饰符来阻止事件传播。

<template>
	<view class="container">
		<view class="avatar-wrap" @click="avatarSwitch">
			<text>头像</text>
			<view class="avatar-image">
				<image :src="avatarUrl" @click.stop="previewImage"></image>
				<view class="avatar-symbol">></view>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				avatarUrl: '',
			}
		},
		methods: {
			avatarSwitch() {
				//从相册中选择头像
				uni.chooseImage({
					success: (res) => {
						uni.uploadFile({
							//你后端服务器地址
							url: `http://localhost:5050/files/file`,
							//要上传文件资源的路径
							filePath: res.tempFilePaths[0],
							//文件对应的名称,与后端接收的属性名一直 
							name: 'file',
							//请求中其他额外的数据
							formData: {},
							success: (uploadFileRes) => {
								this.avatarUrl = uploadFileRes.data;
							}
						});
					}
				});
			},
			//图片的预览
			previewImage() {
				uni.previewImage({
					urls: [this.avatarUrl]
				})
			}
		}
	}
</script>

<style lang="scss">
	.avatar-wrap {
		box-sizing: border-box;
		width: 100%;
		height: 140rpx;
		background-color: #fff;
		padding: 30rpx;
		display: flex;
		align-items: center;
		justify-content: space-between;
		color: #999;

		.avatar-image {
			display: flex;
			align-items: center;

			image {
				width: 100rpx;
				height: 100rpx;
				border-radius: 50%;
			}

			.avatar-symbol {
				margin-left: 15rpx;
			}
		}
	}
</style>

后端代码

首先是 application.yml 配置文件,端口号配置的 5050,根据你的需求更改。

自定义文件的存放位置:file:path: D://uploadPath/images/

# 端口号
server:
  port: 5050
spring:
  # 文件上传配置
  servlet:
    multipart:      
      #是否开启文件上传支持,默认是 true
      enabled: true
      #文件写入磁盘的阈值,默认是0
      file-size-threshold: 0
      # 设置单个文件的最大尺寸
      max-file-size: 10MB
      # 设置请求的最大尺寸
      max-request-size: 100MB
# 自定义图片存放位置
file:
  path: D://uploadPath/images/

controller 控制层代码

package com.test.blog.controller;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;

@RestController
@RequestMapping("/files")
public class FilesUnloadController {
    // 文件上传路径
    @Value("${file.path}")
    private String filePath;

    // 单文件上传
    @RequestMapping("/file")
    public String upload(@RequestParam MultipartFile file, HttpServletRequest request) {
        // 获取服务器路径
        String serverPath = request.getScheme() + "://" + request.getServerName()
                + ":" + request.getServerPort();
        // 获取文件名
        String fileName = file.getOriginalFilename();
        // 保存文件
        File newFile = new File(filePath + '\\' + fileName);
        // 获取文件url
        String url = serverPath + "/images/" + fileName;
        // 判断父级文件目录是否存在,不存在则创建
        if (!newFile.getParentFile().exists()) {
            newFile.getParentFile().mkdirs();
            System.out.println("父级文件目录不存在,已创建目录");
        }
        try {
            // 保存文件
            file.transferTo(newFile);
            System.out.println("文件上传成功");
        } catch (IOException e) {
            // 程序错误
            e.printStackTrace();
            System.out.println("程序错误,请重新上传");
        }
        // 返回文件 url
        return url;
    }
}

添加一个配置类,将静态文件映射位置映射出去,可以通过 url 访问。

package com.test.blog.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
	// 设置静态资源映射
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/images/**").addResourceLocations("file:D:/uploadPath/images/");
    }
}
  • 38
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CRMEB商城JAVA版是一个基于SpringBoot + Maven + Swagger + Mybatis Plus + Redis+ Uniapp +Vue的商城系统。它包含了移动端、小程序、PC后台、Api接口等模块,可以实现产品管理、用户管理、购物车、订单管理、积分管理、优惠券管理、营销活动、余额管理、权限管理、角色管理、系统设置等功能。使用这个系统可以大大减少二次开发的成本。该系统已经迭代到了1.2版,新增了秒杀功能和财务管理功能,并持续进行优化和修复已知的bug。运行环境要求是JAVA1.8。系统中有详细的代码注释和完整的系统手册,前端采用了Vue CLI框架和Vue Router,使用Node.js进行打包,以提升页面加载速度和用户体验。系统支持标准接口和前后端分离,方便二次开发。同时还支持队列和无缝事件机制,降低流量高峰,解除耦合,提高系统的可用性。系统还提供了数据表格导出和数据统计分析功能,后台使用ECharts图表统计,可以实现用户、产品、订单、资金等的统计分析。此外,系统还具有强大的后台权限管理和表单生成控件,可以灵活配置开发表单,减少前端工作量。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [一个基于Java,SpringBoot +Uniapp的开源商城项目](https://blog.csdn.net/CRMEB/article/details/109640801)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的柠檬我的心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值