1、登录aliyun
1.1、什么是OSS?有什么用?
OSS 是“Object Storage Service”的缩写,中文常称为“对象存储服务”。OSS 是一种互联网云存储服务,主要用于海量数据的存储与管理。
相较于nginx,OSS更灵活,不用将文件存储于本地磁盘或服务器中,并且可以实现文件共享,它通过简单的RESTful接口提供高可用、高可靠、安全、低成本的数据存储能力,支持多种数据的存储需求,如图片、视频、音频文件以及各类文档等,在当今市场上应用广泛。
1.2、进入阿里云网站
2、开通OSS
2.1 点击”免费试用“
2.2 立即试用
2.3 立即试用
2.4、提交成功
3、创建存储空间
3.1进入前台界面
3.2 新建Bucket
3.3 进入Bucket并创建文件夹
"Bucket"是一个核心概念,Bucket 可以被形象地理解为一个容器或目录,用于存储和组织文件或对象。
3.4进入Bucket后查看概览,记录下图信息
4、查询accessKeyId和accessKeySecret。
4.1 点击确认
4.2点击继续使用AccessKey
4.3 创建AccessKey
4.4 安全验证
4.5 获取AccessKeyId和AccessKeySecret
5、再次进入
5.1产品文档
5.2 免费试用
5.3 我的试用
5.4 管理关联实例
5.5查看相关信息
6 代码操作
6.1 设置配置信息
# properties文件格式
aliyun.oss.bucketName = Bucket名字
aliyun.oss.endpoint = 自己的域名节点
aliyun.oss.accessKeyId = 自己的accessKeyId
aliyun.oss.accessKeySecret = 自己的accessKeySecret
#yml文件格式
#aliyun:
# oss:
# bucketName:
# endpoint:
# accessKeyId:
# accessKeySecret:
6.2 引入依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.6.0</version>
</dependency>
6.3 创建工具类AliOssUtil
AliOssUtil是一个用于封装阿里云对象存储服务(OSS)操作的工具类。这个工具类可以帮助你更简单地执行常见的OSS操作,如上传文件、下载文件、删除文件、列出bucket中的对象等。
package com.beiyou.Util;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import java.io.File;
import java.net.URL;
import java.util.Date;
public class AliOssUtil {
private static final String ENDPOINT = ""; // 更改为你的Endpoint
private static final String ACCESS_KEY_ID = ""; // 更改为你的Access Key ID
private static final String ACCESS_KEY_SECRET = ""; // 更改为你的Access Key Secret
private static final String BUCKET_NAME = ""; // 更改为你的Bucket名称
private static OSS ossClient;
// 初始化OSS客户端
public static void init() {
ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
}
// 上传文件到OSS
public static void uploadFile(String objectName, File file) {
ossClient.putObject(new PutObjectRequest(BUCKET_NAME, objectName, file));
}
// 删除OSS上的文件
public static void deleteFile(String objectName) {
ossClient.deleteObject(BUCKET_NAME, objectName);
}
// 获取文件URL
public static URL getUrl(String objectName, int expires) {
// 设置URL过期时间为expires秒后
Date expiration = new Date(System.currentTimeMillis() + expires * 1000L);
return ossClient.generatePresignedUrl(BUCKET_NAME, objectName,expiration);
}
// 列出Bucket中的所有对象
public static List<OSSObjectSummary> listAllObjects() {
ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(BUCKET_NAME));
List<OSSObjectSummary> objectSummaries = objectListing.getObjectSummaries();
while (true) {
// 如果有下一批,继续获取
if (objectListing.isTruncated()) {
objectListing = ossClient.listObjects(String.valueOf(objectListing));
objectSummaries.addAll(objectListing.getObjectSummaries());
} else {
break;
}
}
return objectSummaries;
}
// 关闭OSS客户端
public static void shutdown() {
ossClient.shutdown();
}
}
Java
6.4 测试
package com.beiyou;
import com.beiyou.Util.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.File;
import java.net.URL;
@Slf4j
@SpringBootTest
class Application {
// 上传文件
@Test
void contextLoads() {
AliOssUtil.init();
// 上传文件
File file = new File("C:\\Users\\ljj\\Downloads\\1.jpg");
String name = file.getName();
AliOssUtil.uploadFile(name, file);
// 关闭OSS客户端
AliOssUtil.shutdown();
}
// 删除文件
@Test
void deleteFile() {
AliOssUtil.init();
// 删除文件
AliOssUtil.deleteFile("AccessKey.csv");
// 关闭OSS客户端
AliOssUtil.shutdown();
}
@Test
void getUrl() {
AliOssUtil.init();
// 获取文件URL
URL url = AliOssUtil.getUrl("1.jpg", 3600);// 3600 seconds = 1 hour
if (url != null) {
System.out.println("文件URL: " + url);
} else {
System.out.println("无法获取文件URL");
}
// 关闭OSS客户端
AliOssUtil.shutdown();
}
@Test
void listObjects() {
AliOssUtil.init();
// 列出所有文件
List<OSSObjectSummary> summaries = AliOssUtil.listAllObjects();
for (OSSObjectSummary summary : summaries) {
System.out.println(" - " + summary.getKey() + " " +
"(size = " + summary.getSize() + ")");
}
// 关闭OSS客户端
AliOssUtil.shutdown();
}
}
Java
注意:
路径格式问题:文件路径需要使用双
斜杠(”\\”)
7 应用到工程中
7.1 需求
将本来上传到nginx的图片上传到OSS,并成功在工程中展现出来。
7.2 实操
7.2.1修改UploadService
将以下的upload方法和select方法加到UploadService.java文件中
public String upload(UploadDto uploadDto) { String name = uploadDto.getName(); String base64 = uploadDto.getBase64(); String[] strings = StrUtil.splitToArray(base64, "base64,"); //解码 byte[] decode = Base64.decode(strings[1]); //生成文件名,生成唯一数字,避免文件名重复 name= IdUtil.fastSimpleUUID() +"_"+name; //获取文件名,将文字转换为拼音 name = PinyinUtil.getPinyin(name, ""); //初始化OSS AliOssUtil.init(); //将字节数组转换为文件 File file = FileUtil.writeBytes(decode, name); //将文件上传到OSS AliOssUtil.uploadFile(name,file); //关闭资源 AliOssUtil.shutdown();// FileUtil.writeBytes(decode,uploadPath+name); //返回文件路径 URL url = AliOssUtil.getUrl(name, 60 * 60 * 24 * 365);//路径过期时间设置为365天 return url.toString(); }
public List<FileInfoDto> select() { //初始化OSS AliOssUtil.init(); //获取文件列表 List<OSSObjectSummary> listAllObjects = AliOssUtil.listAllObjects(); //新建list集合,结合中是FileInfoDto的类对象,对象包含了文件名称和文件路径 List<FileInfoDto> fileInfoDtoList = new ArrayList<>(); // 遍历listAllObjects集合,将集合中的数据封装到FileInfoDto的类对象中 listAllObjects.forEach(item->{ //创建FileInfoDto的类对象 FileInfoDto fileInfoDto = new FileInfoDto(); fileInfoDto.setName(StrUtil.subBefore(item.getKey(), "_", true)); fileInfoDto.setUrl(AliOssUtil.getUrl(item.getKey(), 60 * 60 * 24 * 365).toString()); fileInfoDtoList.add(fileInfoDto); }); //关闭资源 AliOssUtil.shutdown(); return fileInfoDtoList; }
Java