相关推荐recommended
Spring Boot中实现图片上传功能的两种策略
作者:mmseoamin日期:2024-03-20

🌟 前言

欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍

  • 🤖 洛可可白:个人主页

  • 🔥 个人专栏:✅前端技术 ✅后端技术

  • 🏠 个人博客:洛可可白博客

  • 🐱 代码获取:bestwishes0203

  • 📷 封面壁纸:洛可可白wallpaper

Spring Boot中实现图片上传功能的两种策略,在这里插入图片描述,第1张

文章目录

  • 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库。

          
          
              com.aliyun.oss
              aliyun-sdk-oss
              3.16.1
          
          
          
              commons-io
              commons-io
              2.11.0
          
          
              commons-beanutils
              commons-beanutils
              1.9.4
          
          

          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提供了高可用性和扩展性,适合需要远程访问和高并发的场景;而本地文件系统则适合小型项目或对数据安全性要求不高的场景。在实际开发中,开发者应根据实际情况灵活选择。

          如果对你有帮助,点赞、收藏、关注是我更新的动力!👋🌟🚀

          🎉 往期精彩回顾

          1. Spring Boot工程集成验证码生成与验证功能教程
          • 文章浏览阅读1.3k次,点赞17次,收藏38次。
            1. Spring Boot 3项目集成Swagger3教程
            • 文章浏览阅读768次,点赞8次,收藏15次。
              1. VS code搭建C/C++运行环境简单易上手
              • 文章浏览阅读2.7k次,点赞8次,收藏5次。
                1. 入门指南:使用uni-app构建跨平台应用
                • 文章浏览阅读1.2k次,点赞29次,收藏9次。