当前位置: 代码网 > it编程>编程语言>Java > SpringBoot对接阿里云OSS的详细步骤和流程

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

2025年08月04日 Java 我要评论
以下是 spring boot 对接阿里云 oss 的详细步骤和流程,结合官方网页和最佳实践整理而成:一、准备工作​​注册阿里云账号​​访问阿里云官网完成注册和实名认证。​​开通 oss 服务​​登录

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

一、准备工作

​注册阿里云账号​

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

​开通 oss 服务​

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

​创建 bucket​

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

​获取 accesskey​

  • 进入「accesskey 管理」→ 创建 ram 子用户(推荐)→ 保存 accesskey idaccesskey 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 所在地域的 endpoint
    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;
    private string bucketname;
}

@component
public class ossclientfactory {
    @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;

    @postmapping("/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的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com