开发者

SpringBoot对接阿里云OSS的详细步骤和流程

目录
  • 一、准备工作
  • 二、Spring Boot 项目配置
    • 1. 添加依赖
    • 2. 配置 OSS 参数
    • 3. 创建配置类
  • 三、实现文件上传功能
    • 1. 文件上传服务类
    • 2. 控制器层
  • 四、测试与部署
    • 五、扩展功能
      • 六、常见问题

        以下是 Spring Boot 对接阿里云 OSS 的详细步骤和流程,结合官方网页和最佳实践整理而成:

        一、准备工作

        ​注册阿里云账号​

        • 访问阿里云官网完成注册和实名认证。

        ​开通 OSS 服务​

        • 登录阿里云控制台 → 进入 OSS 服务 → 开通对象存储 OSS。

        ​创建 Bucket​

        • 进入 OSS 控制台 → 点击「创建 Bucket」→ 填写名称(如 my-bucket)、地域(如华北2北京)→ 存储类型选择「标准存储」→ 权限选择「私有」。

        ​获取 AccessKey​

        • 进入「AccessKey 管理」→ 创建 RAM 子用户(推荐)→ 保存 AccessKey IDAccesshttp://www.devze.comKey Secret

        二、Spring Boot 项目配置

        1. 添加依赖

        pom.XML 中添加 OSS SDK 和 Web 依赖:

        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.17.0</version> <!-- 使用最新稳定版本 -->
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        

        ​注意​​:若使用 Java 11+,需添加 JAXB 依赖:

        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>3.0.2</version>
        </dependency>
        

        2. 配置 OSS 参数

        application.yml 中配置:

        aliyun:
          oss:
            endpoint: oss-cn-beijing.aliyuncs.com  # Bucket 所在地域的 Endwww.devze.compoint
            access-key-id: your-access-key-id
            access-key-secret: your-access-key-secret
            bucket-name: your-bucket-name
            max-file-size: 10MB  # 最大文件限制(可选)
            allowed-extensions: jpg,jpeg,png,pdf  # 允许的文件类型(可选)
        

        3. 创建配置类

        通过 @ConfigurationProperties 读取配置并初始化 OSSClient:

        @Configuration
        @ConfigurationProperties(prefix = "aliyun.oss")
        @Data
        public class OssConfig {
            private String endpoint;
            private String accessKeyId;
            private String accessKeySecret;
            pri编程客栈vate String bucketName;
        }
        
        @Component
        public class Os编程客栈sClientFactory {
            @Autowired
            private OssConfig ossConfig;
        
            private OSS ossClient;
        
            @PostConstruct
            public void init() {
                ossClient = new OSSClientBuilder().build(
                    ossConfig.getEndpoint(),
                    ossConfig.getAccessKeyId(),
                    ossConfig.getAccessKeySecret()
                );
            }
        
            @PreDestroy
            public void shutdown() {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
        

        三、实现文件上传功能

        1. 文件上传服务类

        @Service
        @RequiredArgsConstructor
        public class OssService {
            private final OssConfig ossConfig;
            private final OssClientFactory ossClientFactory;
        
            public String uploadFile(MultipartFile file) {
                // 校验文件
                validateFile(file);
        
                // 生成唯一文件名(避免重复)
                String fileName = UUID.randomUUID().toString() + "_" + file.getOriginalFilename();
        
                try (InputStream inputStream = file.getInputStream()) {
                    // 上传到 OSS
                    ossClientFactory.getOssClient().putObject(
                        ossConfig.getBucketName(),
                        fileName,
                        inputStream
                    );
                    // 生成访问 URL
                    return generateAccessUrl(fileName);
                } catch (IOException e) {
                    throw new RuntimeException("文件上传失败", e);
                }
            }
        
            private String generateAccessUrl(String fileName) {
                Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000); // URL 有效期 1 小时
                return ossClientFactory.getOssClient().generatePresignedUrl(
                    ossConfig.getBucketName(),
                    fileName,
                    expiration
                ).toString();
            }
        
            private void validateFile(MultipartFile file) {
                // 校验文件大小
                if (file.getSize() > parseSize(ossConfig.getMaxFileSize())) {
                    throw new RuntimeException("文件大小超过限制");
                }
                // 校验文件类型
                String extension = FilenameUtils.getExtension(file.getOriginalFilename()).toLowerCase();
                if (!Arrays.asList(ossConfig.getAllowedExtensions().split(",")).contains(extension)) {
                    throw new RuntimeException("不支持的文件类型");
                }
            }
        
            private long parseSize(String size) {
                // 解析如 "10MB" 为字节单位
                // 实现略...
            }
        }
        

        2. 控制器层

        @RestController
        @RequestMapping("/api/oss")
        @RequiredArgsConstructor
        public class OssController {
            private final OssService ossService;
        
            @PostMappinpythong("/upload")
            public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
                String url = ossService.uploadFile(file);
                return ResponseEntity.ok(url);
            }
        }
        

        四、测试与部署

        ​本地测试​

        • 使用 Postman 发送 POST 请求到 /api/oss/upload,选择文件上传。
        • 返回的 URL 即为 OSS 中文件的访问地址。

        ​部署注意事项​

        • ​安全建议​​:避免硬编码 AccessKey,推荐使用 RAM 子用户和 STS 临时凭证。
        • ​性能优化​​:大文件建议使用分片上传(MultipartUpload)。
        • ​存储类型​​:根据访问频率选择标准存储、低频存储或归档存储。

        五、扩展功能

        ​文件下载​

        public void downloadFile(String fileName, String localPath) {
            ossClientFactory.getOssClient().getObject(
                new GetObjectRequest(ossConfig.getBucketName(), fileName),
                new File(localPath)
            );
        }
        

        ​文件删除​

        public void deleteFile(String fileName) {
            ossClientFactory.getOssClient().deleteObject(
                ossConfig.getBucketName(),
                fileName
            );
        }
        

        ​图片处理​

        // 添加水印
        GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, fileName);
        request.addResponseHeader("x-oss-process", "image/watermark,image_aHR0cDovL3Npb2FsQ0hJTmV3UzIwMjMxMDA1,size_20,text_QDUxQ1RPQ0hJTmV3UzIwMjMxMDA1001");
        URL url = ossClient.generatePresignedUrl(request);
        

        六、常见问题

        ​AccessKey 权限不足​

        • 检查 RAM 子用户是否已授权 OSS 的 oss:PutObject 等权限。

        ​文件上传失败​

        • 检查 Bucket 是否存在、网络是否连通、文件大小是否超出限制。

        ​URL 无法访问​

        • 确认 Bucket 的读写权限是否为「私有」时需使用签名 URL。

        通过以上步骤,即可实现 Spring Boot 与阿里云 OSS 的完整对接。如需进一步优化,可参考阿里云 OSS 官方网页。

        以上就是SpringBoot对接阿里云OSS的详细步骤和流程的详细内容,更多关于SpringBoot对接阿里云OSS的资料请关注编程客栈(www.devze.com)其它相关文章!

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新开发

        开发排行榜