阿里云oss给咱们提供了一个云存储方案,这样咱们就不需要将文件存储在咱们自己的服务器上或者是说服务器上面。而且提供了很多强大的功能,阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本窝~。
阿里云OSS教学视频连接:开始使用OSS - 对象存储 OSS - 阿里云
写代码之前咱们还需要导入阿里云OSS的依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--阿里云 OSS云存储-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
当然啦工具类已经封装好啦,调用即用窝~
package com.example.testoss.utils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.*;
import java.io.*;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import static com.aliyun.oss.internal.OSSConstants.URL_ENCODING;
/**
* 阿里云 oss云存储
* @author shenwang
* @version 1.0
*/
public class OSSUtil {
/**
* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
*/
static String endpoint = "自己的endpoint";
/**
* 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
*/
static String accessKeyId = "自己的accessKeyId";
static String accessKeySecret = "自己的accessKeySecret";
/**
* OSSClient实例。
*/
static OSS ossClient=null;
static {
// 创建OSSClient实例。
ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
}
/**
* 创建存储空间
* @param bucketName
* @return
*/
public static boolean createBucket(String bucketName){
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 创建存储空间。
ossClient.createBucket(bucketName);
// 关闭OSSClient。
ossClient.shutdown();
return true;
}
/**
* 上传文件
* @param bucketName 填写Bucket名称,例如examplebucket。
* @return
*/
public static boolean uploadFile(String bucketName,String path){
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
InputStream inputStream = null;
try {
File file=new File(path);
inputStream = new FileInputStream(file);
// 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
ossClient.putObject(bucketName,file.getName(),inputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 关闭OSSClient。
ossClient.shutdown();
return true;
}
/**
* 删除文件
* @param bucketName
* @return
*/
public static boolean deleteFile(String bucketName,String ... params){
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 删除文件。
// 填写需要删除的多个文件完整路径。文件完整路径中不能包含Bucket名称。
List<String> keys = new ArrayList<String>();
for (int i=0;i<params.length;i++){
keys.add(params[i]);
}
DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keys).withEncodingType(URL_ENCODING));
List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
try {
for(String obj : deletedObjects) {
String deleteObj = URLDecoder.decode(obj, "UTF-8");
System.out.println(deleteObj);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 关闭OSSClient。
ossClient.shutdown();
return true;
}
/**
* 列举文件
* @param bucketName
* @param keyPrefix
* @return
*/
public static List<String> selectAll(String bucketName,String keyPrefix){
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
List<String> keyList=new ArrayList<>();
// 列举文件。如果不设置KeyPrefix,则列举存储空间下的所有文件。如果设置KeyPrefix,则列举包含指定前缀的文件。
ObjectListing objectListing = ossClient.listObjects(bucketName, keyPrefix);
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
for (OSSObjectSummary s : sums) {
System.out.println("\t" + s.getKey());
keyList.add(s.getKey());
}
// 关闭OSSClient。
ossClient.shutdown();
return keyList;
}
}
此工具类提供了,创建存储空间,上传文件,删除文件,和查询文件的功能,然后咱们来写一个工具类来测试一下吧!!!
import com.example.testoss.utils.OSSUtil;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class TestOssApplicationTests {
/**
* 创建存储空间
*/
@Test
public void testCreateBucket(){
boolean flag = OSSUtil.createBucket("bucket名称");
System.out.println(flag?"创建成功!!!":"创建失败!!!");
}
/**
* 上传文件
*/
@Test
public void testUploadFile(){
boolean flag = OSSUtil.uploadFile("自己的bucket名字", "F:\\test.js");
System.out.println(flag?"上传成功!!!":"上传失败!!!");
}
/**
* 删除文件
*/
@Test
public void testDeleteFile(){
boolean flag = OSSUtil.deleteFile("自己的bucket名字", "01.png");
System.out.println(flag?"查询成功!!!":"查询失败!!!");
}
/**
* 查询文件
*/
@Test
public void testQueryFile(){
List<String> strings = OSSUtil.selectAll("自己的bucket名字", null);
if (strings!=null){
System.out.println("查询成功!!!");
for (String fileName:strings){
System.out.println(fileName);
}
}
}
}