永久的免费网站地址西安网络优化培训机构公司
目录
- 准备工作
- 账号注册
- 开通OSS服务
- 创建 Bucket 存储空间
- 获取Bucket信息以及【Access密钥】
- 初始化一个SpringBoot项目
- 使用阿里OSS服务
- 1.创建一个配置类
- 2.创建OSS工具类
- 3.代码测试
🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解 Lombok 请看: Lombok 入门到精通:告别冗余代码
其他优质专栏: 【🎇SpringBoot】【🎉多线程】【🎨Redis】【✨设计模式专栏(已完结)】…等
如果喜欢作者的讲解方式,可以点赞收藏加关注,你的支持就是我的动力
✨更多文章请看个人主页: 码熔burning
官网介绍:阿里云对象存储 OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供最高可达 99.995 % 的服务可用性。多种存储类型供选择,全面优化存储成本。
OSS主要存储的就是一些非结构化数据,如:图片、视频、日志文件等。
它的优势我就不一一介绍了,毕竟是阿里的,直接进入文章的主题吧。
准备工作
账号注册
访问官网 阿里云官网 进行账号注册,这里我就不演示了。
开通OSS服务
登录成功了之后,点击控制台,按照下面图片步骤
首次使用的话需要开通权限
创建 Bucket 存储空间
Bucket 就是用来存储文件的基本容器
其他默认即可
获取Bucket信息以及【Access密钥】
重点是:【Bucket名称】、 【Endpoint(地域节点)】、【 AccessKeyId】、【 AccessKeySecret】,务必要记住,后面配置的时候要用到。
-
【Bucket名称】的获取
-
【Endpoint(地域节点)】的获取
按照箭头的指向,点击完概述之后,往下滑,找到 Endpoint(地域节点)
-
【 AccessKeyId】、【 AccessKeySecret】的获取
将鼠标移动到个人头像,然后点击 AccessKey
点击创建 AccessKey
使用手机号验证通过后,请务必保存好【 AccessKeyId】、【 AccessKeySecret】(仅显示一次)
这四个属性获取完成之后,接下来就可以来使用了
初始化一个SpringBoot项目
项目创建完成之后,根据官方文档,引入依赖:
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version>
</dependency>
使用 JDK 9以上的版本别忘记引入下面的依赖:
<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version>
</dependency>
然后配置文件参数,还记得上面获取的四个重要的参数吗,填入你自己的即可
使用阿里OSS服务
1.创建一个配置类
用于绑定application.yml中的OSS配置属性。
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class OssProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;
}
2.创建OSS工具类
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.PutObjectRequest;
import com.gewb.configuration.OssProperties;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;import java.io.File;
import java.io.IOException;
import java.io.InputStream;@Component
public class OssUtil {private OSS ossClient;private final OssProperties ossProperties;@Autowiredpublic OssUtil(OssProperties ossProperties) {this.ossProperties = ossProperties;}@PostConstructpublic void init() {// 初始化OSS客户端this.ossClient = new OSSClientBuilder().build(ossProperties.getEndpoint(),ossProperties.getAccessKeyId(),ossProperties.getAccessKeySecret());}@PreDestroypublic void destroy() {// 关闭客户端if (ossClient != null) {ossClient.shutdown();}}// --- 核心方法 ---/*** 上传文件到OSS** @param key 文件在OSS中的路径(例如:images/2023/test.jpg)* @param file 要上传的本地文件* @return 上传后的文件URL*/public String uploadFile(String key, File file) {checkBucketExist();ossClient.putObject(new PutObjectRequest(ossProperties.getBucketName(), key, file));return getOssUrl(key);}/*** 通过输入流上传文件*/public String uploadFile(String key, InputStream inputStream, long contentLength) {checkBucketExist();ossClient.putObject(ossProperties.getBucketName(), key, inputStream);return getOssUrl(key);}/*** 下载文件到本地*/public void downloadFile(String key, File localFile) {checkBucketExist();OSSObject ossObject = ossClient.getObject(ossProperties.getBucketName(), key);try (InputStream inputStream = ossObject.getObjectContent()) {FileUtils.copyInputStreamToFile(inputStream, localFile);} catch (IOException e) {throw new RuntimeException("下载文件失败", e);}}/*** 删除OSS文件*/public void deleteFile(String key) {checkBucketExist();ossClient.deleteObject(ossProperties.getBucketName(), key);}// --- 辅助方法 ---private void checkBucketExist() {if (StringUtils.isEmpty(ossProperties.getBucketName())) {throw new IllegalArgumentException("Bucket名称未配置");}}private String getOssUrl(String key) {return String.format("https://%s.%s/%s",ossProperties.getBucketName(),ossProperties.getEndpoint(),key);}// 异常处理示例(可按需扩展)private void handleOssException(OSSException e) {System.out.println("OSS错误码: " + e.getErrorCode());System.out.println("OSS错误信息: " + e.getMessage());throw new RuntimeException("OSS操作失败", e);}
}
3.代码测试
@SpringBootTest
public class SimpleOssTest {@Autowiredprivate OssUtil ossUtil;@Testpublic void testUpload() {// 1. 创建测试文件路径File testFile = new File("E:\code_photos\test.jpeg"); // 替换为你的测试文件路径if (!testFile.exists()) {throw new RuntimeException("测试文件不存在,请检查路径!");}// 2. 上传文件到OSSString ossKey = "test/" + testFile.getName();String url = ossUtil.uploadFile(ossKey, testFile);System.out.println("上传后的URL:" + url);// 3. 验证结果(简单断言)assert url != null && !url.isEmpty() : "上传失败,URL为空";assert url.contains(ossKey) : "上传路径不匹配";}
}
可以看到已经上传成功了:
其他功能大同小异,可以使用工具类中的方法来测试。