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

使用 Spring Boot 集成七牛云实现图片/文件上传

在 Web 开发中,文件上传是一个常见需求,比如用户头像、商品图片等。传统做法是把文件直接存储在本地服务器,但这种方式存在磁盘容量有限、备份不便、访问速度不稳定等问题。

为了更好地处理文件存储,我们可以使用云存储。今天我们以七牛云对象存储为例,讲解如何在 Spring Boot 项目中集成,实现图片/文件上传。


一、准备工作

  1. 注册七牛云账号
    前往 七牛云官网 注册并完成实名认证。

  2. 创建存储空间(Bucket)

    • 登录控制台 → 对象存储 → 新建空间

    • 选择存储区域(如华东、华北等)

    • 设置空间访问权限(公开 / 私有)

  3. 获取 AccessKey 和 SecretKey

    • 个人中心 → 密钥管理 → 复制 AccessKey 和 SecretKey
      (注意不要泄露,最好使用 .yml 配置文件管理)
  4. 绑定自定义域名(可选)

    • 用七牛云默认的测试域名也可以,但正式项目建议绑定自己的 CDN 域名,提升稳定性和品牌感。

二、Spring Boot 集成七牛云

1. 添加依赖

pom.xml 中添加七牛云 SDK:

<dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.13.0</version>
</dependency>
<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.50</version>
</dependency>

2. 配置文件(application.yml

qiniu:accessKey: agsfbiyawhegfhobalkjsfhiuagiflujqaesaccessSecretKey: CM4-6tyofviuahfiuhawg-bucketName: 1111region: huadong

3. 工具类 QiniuUtils

package warren.myblog.utils;import com.alibaba.fastjson2.JSON;
import com.qiniu.http.Response;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import com.qiniu.storage.Configuration;
import org.springframework.beans.factory.annotation.Value;@Component
public class QiniuUtils {// 七牛云存储访问域名(替换成自己的)public static final String url = "http://afhuioasnm.ef-sdghi.clouddn.com/";@Value("${qiniu.accessKey}")private String accessKey;@Value("${qiniu.accessSecretKey}")private String accessSecretKey;@Value("${qiniu.bucketName}")private String bucket;/*** 上传文件到七牛云*/public boolean upload(MultipartFile file, String fileName) {try {// 配置存储区域Configuration cfg = new Configuration(Region.autoRegion());UploadManager uploadManager = new UploadManager(cfg);// 获取上传凭证Auth auth = Auth.create(accessKey, accessSecretKey);String upToken = auth.uploadToken(bucket);// 上传文件byte[] uploadBytes = file.getBytes();Response response = uploadManager.put(uploadBytes, fileName, upToken);// 解析上传结果DefaultPutRet putRet = JSON.parseObject(response.bodyString(), DefaultPutRet.class);return true;} catch (Exception ex) {ex.printStackTrace();}return false;}
}

4. 控制器 UploadController

package warren.myblog.controller;import io.swagger.v3.oas.annotations.Operation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import warren.myblog.common.Result;
import warren.myblog.utils.QiniuUtils;import java.util.UUID;import static warren.myblog.Params.ErrorCode.FILE_UPLOAD_ERROR;@RestController
@RequestMapping
public class UploadController {@Autowiredprivate QiniuUtils qiniuUtils;@Operation(tags = "上传图片")@PostMapping("/user/upload")public Result upload(@RequestParam("file") MultipartFile file) {String fileName = UUID.randomUUID() + "." + StringUtils.substringAfterLast(file.getOriginalFilename(), ".");boolean upload = qiniuUtils.upload(file, fileName);if (upload) {return Result.success(QiniuUtils.url + fileName);}return Result.fail(FILE_UPLOAD_ERROR.getCode(), FILE_UPLOAD_ERROR.getMsg());}
}

三、与其他存储方案对比

  • 七牛云:适合个人博客、小型项目,性价比高

  • 阿里云 OSS:适合企业生产环境,需要高 SLA、全球加速

  • MinIO:适合有自建需求、私有化部署的场景,比如公司内部文件管理

http://www.lryc.cn/news/615289.html

相关文章:

  • 机器翻译:FastText算法详解与Python的完整实现
  • istio笔记03--快速上手多集群mesh
  • 支持 UMD 自定义组件与版本控制:从 Schema 到动态渲染
  • [FOC电机控制]霍尔传感器于角度问题
  • 贪心----1.买卖股票的最佳时机
  • GoEnhance AI-AI视频风格转换工具
  • 利用whisper api实现若无字幕则自动下载音频并用 whisper 转写,再用 LLM 总结。
  • 飞算JavaAI:人工智能与Java的创新融合与应用前景
  • Klipper-G3圆弧路径算法
  • 四、RuoYi-Cloud-Plus 部署时nacos配置服务启动
  • 驾驶场景玩手机识别准确率↑32%:陌讯动态特征融合算法实战解析
  • 最长回文子串(马拉车/Manacher‘s )算法
  • Android 设置/修改系统NTP服务地址
  • 【Avalonia】无开发者账号使用iOS真机调试跨平台应用
  • 提示条贴合右侧边栏
  • Java 大视界 -- Java 大数据在智能家居场景联动与用户行为模式挖掘中的应用(389)
  • 虚拟机Ubuntu重启发现找不到共享文件夹
  • 2025AI颠覆认知!解锁智能新纪元
  • ubuntu修改密码
  • Java基础-TCP通信(多发多收和一发一收)
  • webrtc弱网-BandwidthQualityScaler 源码分析与算法原理
  • 基于 RAUC 的 Jetson OTA 升级全攻略
  • RAGFoundry:面向检索增强生成的模块化增强框架
  • 功能测试中常见的面试题-一
  • DataDex 多样化 JSON 服务——使用教程
  • linux php版本降级,dnf版本控制
  • 在CoT中为什么仅用方程式提示不够
  • drippingblues靶机教程
  • Spring Boot自定义Starter:从原理到实战全解析
  • AutoML 的下半场——从“模型选择”到“端到端业务闭环”