🌟 前言
欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍
🤖 洛可可白:个人主页
🔥 个人专栏:✅前端技术 ✅后端技术
🏠 个人博客:洛可可白博客
🐱 代码获取:bestwishes0203
📷 封面壁纸:洛可可白wallpaper
文章目录
- Spring Boot中实现图片上传功能的两种策略
- 摘要
- 1. 保存到阿里云OSS
- 1.1 依赖添加
- 1.2 配置OSS客户端
- 1.3 控制层实现
- 2. 保存到本地文件系统
- 2.1 控制层实现
- 🎉 结语
Spring Boot中实现图片上传功能的两种策略
摘要
在现代Web应用程序中,图片上传是一个常见的功能。本文将介绍如何在Spring Boot项目中实现图片上传,包括将图片保存到阿里云OSS和本地文件系统两种方法。我们将通过代码示例和详细注释,帮助读者理解这两种方法的实现过程。
1. 保存到阿里云OSS
1.1 依赖添加
首先,我们需要在项目的pom.xml
文件中添加阿里云OSS的SDK依赖,以及用于文件操作的commons-io
和commons-beanutils
库。
<!-- 阿里云OSS SDK -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.16.1</version>
</dependency>
<!-- 文件操作工具类 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
1.2 配置OSS客户端
创建一个工具类uploadUtil
,用于配置OSS客户端并实现图片上传功能。我们需要设置OSS的域名、访问密钥ID和密钥,以及OSS的地域节点。
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;
public class UploadUtil {
// OSS域名,注意替换为实际的域名
public static final String ALI_DOMAIN = "https://czh123-text.oss-cn-guangzhou.aliyuncs.com";
// 上传图片到OSS的方法
public static String uploadImage(MultipartFile file) throws IOException {
// 获取原始文件名和扩展名
String originalFilename = file.getOriginalFilename();
String ext = "." + FilenameUtils.getExtension(originalFilename);
// 生成新的文件名,包含UUID以避免重名
String uuid = UUID.randomUUID().toString().replace("-", "");
String fileName = uuid + ext;
// OSS配置信息
String endpoint = "http://oss-cn-guangzhou.aliyuncs.com"; // 地域节点
String accessKeyId = "LTAI5tGOUpuc5EwDcJ9"; // 访问密钥ID
String accessKeySecret = "fYy0DdFrrFBwky"; // 访问密钥Secret
// 创建OSS客户端
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件到OSS
ossClient.putObject("czh123-text", fileName, file.getInputStream());
// 关闭客户端
ossClient.shutdown();
// 返回图片的URL
return ALI_DOMAIN + fileName;
}
}
1.3 控制层实现
在控制器中,我们创建一个upImg
方法,用于处理图片上传请求。该方法调用uploadUtil
类中的uploadImage
方法,并返回图片的URL。
@PostMapping("/upImg")
public String upImg(MultipartFile file) throws IOException {
return UploadUtil.uploadImage(file);
}
2. 保存到本地文件系统
2.1 控制层实现
另一种方法是将图片保存到本地文件系统。在控制器中,我们创建一个upload
方法,用于处理上传请求并将图片保存到指定的本地目录。
@PostMapping("/upload")
public String upload(MultipartFile file) {
if (file.isEmpty()) {
return "图片为空";
}
// 获取原始文件名和扩展名
String originalFilename = file.getOriginalFilename();
String fileNamePrefix = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
String fileNameSuffix = "." + originalFilename.split("\\.")[1];
// 生成新的文件名
String fileName = fileNamePrefix + fileNameSuffix;
// 获取项目根目录的绝对路径
ApplicationHome applicationHome = new ApplicationHome(this.getClass());
String pre = applicationHome.getDir().getParentFile().getParentFile().getAbsolutePath() +
"/src/main/resources/static/images/";
String path = pre + fileName;
try {
// 将上传的文件保存到本地
file.transferTo(new File(path));
// 返回文件的本地路径
return path;
} catch (IOException e) {
e.printStackTrace();
}
return "图片上传失败";
}
🎉 结语
本文介绍了在Spring Boot项目中实现图片上传的两种方法:保存到阿里云OSS和保存到本地文件系统。通过这两种方法,开发者可以根据项目需求和资源情况选择合适的图片存储策略。阿里云OSS提供了高可用性和扩展性,适合需要远程访问和高并发的场景;而本地文件系统则适合小型项目或对数据安全性要求不高的场景。在实际开发中,开发者应根据实际情况灵活选择。
感谢你的访问,期待与你在技术的道路上相遇!👋🌟🚀