当前位置: 首页 > news >正文

山东大学软件学院项目实训-基于大模型的模拟面试系统-个人主页头像上传

采用图床的方案,存储用户头像。

实现步骤

引入OSS依赖

在我们的SpringBoot项目中引入OSS依赖

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version>
</dependency>

配置 OSSClient

package com.sdumagicode.backend.config;import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import io.github.cdimascio.dotenv.Dotenv;
import lombok.Data;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Data
@Configuration
public class OSSUploadConfig {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;private String maxSize;private String prefix;public OSSUploadConfig() {Dotenv dotenv = Dotenv.configure().load();this.endpoint = dotenv.get("ALIYUN_OSS_ENDPOINT");this.accessKeyId = dotenv.get("ALIYUN_OSS_ACCESS_KEY_ID");this.accessKeySecret = dotenv.get("ALIYUN_OSS_ACCESS_KEY_SECRET");this.bucketName = dotenv.get("ALIYUN_OSS_BUCKET_NAME");this.maxSize = dotenv.get("ALIYUN_OSS_MAX_SIZE");this.prefix = dotenv.get("ALIYUN_OSS_DIR_PREFIX");}@Beanpublic OSSClient createOssClient() {return (OSSClient) new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);}
}

配置信息在.env文件里:

# .env 文件(注意:不要加引号)
ALIYUN_OSS_ENDPOINT=oss-cn-hangzhou.aliyuncs.com
ALIYUN_OSS_ACCESS_KEY_ID=your-access-key-id
ALIYUN_OSS_ACCESS_KEY_SECRET=your-access-key-secret
ALIYUN_OSS_BUCKET_NAME=your-bucket-name
ALIYUN_OSS_MAX_SIZE=10MB
ALIYUN_OSS_DIR_PREFIX=uploads/

因为Spring Boot 默认不直接支持 .env 文件,所以需要使用 dotenv 库来加载它。

<dependency><groupId>io.github.cdimascio</groupId><artifactId>dotenv-java</artifactId><version>3.0.0</version>
</dependency>

完成上述代码后,我们就可以在其他类中上传图片到阿里云图床了。

调用实例

首先,根据前端传来的是一个base64编码的图片,于是定义了一个工具类专门处理该图片并将其上传到阿里云图床。

package com.sdumagicode.backend.util;import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.PutObjectRequest;
import com.sdumagicode.backend.config.OSSUploadConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.io.ByteArrayInputStream;
import java.util.Base64;
import java.util.UUID;@Service
public class OSSUpload {private final OSSClient ossClient;private final OSSUploadConfig ossConfig;@Autowiredpublic OSSUpload(OSSClient ossClient, OSSUploadConfig ossConfig) {this.ossClient = ossClient;this.ossConfig = ossConfig;}public String uploadBase64ToOSS(String base64Data, String folder) {try {// 1. 检查 Base64 数据if (base64Data == null || !base64Data.startsWith("data:image/")) {throw new IllegalArgumentException("Base64 数据格式不正确");}// 2. 解析 Base64String[] parts = base64Data.split(",");String header = parts[0]; // data:image/png;base64String data = parts[1];   // 实际数据// 3. 获取文件扩展名String extension = header.split(";")[0].split("/")[1];// 4. 生成唯一文件名String fileName = folder + UUID.randomUUID() + "." + extension;// 5. 解码并上传byte[] bytes = Base64.getDecoder().decode(data);ossClient.putObject(ossConfig.getBucketName(),fileName,new ByteArrayInputStream(bytes));// 6. 返回访问 URLreturn "https://" + ossConfig.getBucketName() + "." + ossConfig.getEndpoint() + "/" + fileName;} catch (Exception e) {throw new RuntimeException("上传图片到 OSS 失败: " + e.getMessage(), e);}}
}

之后,修改UserServiceImpl.java文件里保存图片URL的部分:

@Autowired
private OSSUpload ossUpload;...if (FileDataType.BASE64.equals(user.getAvatarType())) {// 1. 上传Base64图片到OSSString ossUrl = ossUpload.uploadBase64ToOSS(user.getAvatarUrl(), "avatars/");// 2. 更新用户信息user.setAvatarUrl(ossUrl);user.setAvatarType("0"); // 假设"0"表示URL类型
}

图片成功上传到阿里云,并且可以在用户端正常显示。
在这里插入图片描述
在这里插入图片描述

遇到的问题

dotenv版本不匹配

java: cannot access io.github.cdimascio.dotenv.Dotenvbad class file: /Users/leeson/.m2/repository/io/github/cdimascio/dotenv-java/3.0.0/dotenv-java-3.0.0.jar!/io/github/cdimascio/dotenv/Dotenv.classclass file has wrong version 55.0, should be 52.0Please remove or make sure it appears in the correct subdirectory of the classpath.

这个错误是因为 Java 版本不兼容.class 文件的版本 55.0 对应 Java 11,而项目使用的是 Java 8(版本 52.0),导致无法加载该类。

解决方案

降级 dotenv-java(兼容 Java 8)

<dependency><groupId>io.github.cdimascio</groupId><artifactId>dotenv-java</artifactId><version>2.3.2</version> <!-- 支持 Java 8 的版本 -->
</dependency>

修改之后,项目成功地跑了起来。

http://www.dtcms.com/a/174227.html

相关文章:

  • 面试常问系列(一)-神经网络参数初始化-之自注意力机制为什么除以根号d而不是2*根号d或者3*根号d
  • 双ISP(双互联网服务提供商)
  • 为什么Transformer推理需要做KV缓存
  • Kotlin-访问权限控制
  • Python推导式进阶指南:优雅初始化序列的科学与艺术
  • 高光谱相机赋能烟叶分选:精准、高效与智能化的新突破
  • 信息时代的政治重构:网络空间与主权的未来
  • wrod生成pdf。[特殊字符]改背景
  • 【25软考网工】第五章(6)TCP和UDP协议、流量控制和拥塞控制、重点协议与端口
  • 嵌入式开发学习日志Day14
  • Elasticsearch:我们如何在全球范围内实现支付基础设施的现代化?
  • 【BUG】‘DetDataSample‘ object has no attribute ‘_gt_sem_seg‘
  • BRAFAR: Bidirectional Refactoring, Alignment, Fault Localization, and Repair...
  • Listremove数据时报错:Caused by: java.lang.UnsupportedOperationException
  • Win11/Win10无法保存ip设置提示请检查一个或多个设置并重试怎么办?
  • [人机交互]协作与通信的设计
  • 二叉树—中序遍历—非递归
  • centos的根目录占了大量空间怎么办
  • 大语言模型(LLM)领域,有几项显著的进展和技术突破
  • 如何用Java读取PDF
  • 自然语言处理之情感分析:ALBERT在社交媒体的应用技术教程
  • 家庭宽带IP与IDC机房IP
  • ϵ-prediction和z0-prediction是什么意思
  • Day17 聚类算法(K-Means、DBSCAN、层次聚类)
  • HarmonyOS 5.0 低时延音视频开发​​
  • 【硬核数学】0. 序章:万丈高楼平地起,AI数学筑基之旅《从零构建机器学习、深度学习到LLM的数学认知》
  • 数字图像相关法在薄板变形测量中的实践
  • Apache Velocity代码生成简要介绍
  • 单例模式都有哪些?有什么区别?
  • 求组合数【递推+快速幂+卢卡斯+线性筛】