阿里云对象存储(Object Storage Service,简称OSS)是阿里云对外提供的一种海量、安全、低成本、高可靠的云存储服务。
项目需要的依赖
<!-- HuTool工具类
参考文档地址:https://www.hutool.cn/docs/#/
API文档地址:https://apidoc.gitee.com/loolly/hutool/ -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.1</version>
</dependency>
<!-- 阿里云OSS对象存储-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
<exclusion>
<artifactId>commons-codec</artifactId>
<groupId>commons-codec</groupId>
</exclusion>
</exclusions>
</dependency>
工具类
@Slf4j
@Component
public class OssUtil {
@Value("${aliyun.oss.bucket}")
private String bucket;
@Autowired
private OSS ossClient;
/**
* 获取OSS文件大小
*
* @param path
* @return
*/
public long getObjectSize(String path) {
log.info("OSS获取文件大小,path:{}", path);
ObjectListing objectListing = ossClient.listObjects(bucket, path);
log.info("OSS获取文件大小,响应结果:{}", JSON.toJSONString(objectListing));
if (objectListing != null && CollectionUtils.isNotEmpty(objectListing.getObjectSummaries())) {
List<OSSObjectSummary> objectSummaries = objectListing.getObjectSummaries();
return objectSummaries.get(0).getSize();
}
return 0;
}
/**
* 文件上传oss
*
* @param inputStream 文件数组
* @param path 上传的文件夹(bucket下的如cem-web等 多级:cem-web/aaa)
* @param suffix
* @return
*/
public String upload(InputStream inputStream, String path, String suffix) {
log.info("OSS文件上传,入参path:{}", path);
String uploadKey = null;
log.info("OSS文件上传,建立连接");
try {
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
// 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
String fileName = UUIDUtil.getUUID().concat(".").concat(suffix);
uploadKey = path.concat("/").concat(fileName);
log.info("OSS文件上传,Key:{}", uploadKey);
PutObjectResult putObjectResult = ossClient.putObject(bucket, uploadKey, inputStream);
log.info("OSS文件上传,处理结果:{}", JSON.toJSONString(putObjectResult));
} catch (Exception e) {
log.error("音频文件OSS上传处理异常:", e);
}
log.info("OSS文件上传结束,返回文件OSS存储路径:{}", uploadKey);
return uploadKey;
}
/**
* 文件上传oss(直接传入key)
*
* @param inputStream 文件数组
* @param uploadKey
* @return
*/
public String upload(InputStream inputStream, String uploadKey) {
log.info("OSS文件上传,uploadKey:{}", uploadKey);
log.info("OSS文件上传,建立连接");
try {
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
// 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
log.info("OSS文件上传,Key:{}", uploadKey);
PutObjectResult putObjectResult = ossClient.putObject(bucket, uploadKey, inputStream);
log.info("OSS文件上传,处理结果:{}", JSON.toJSONString(putObjectResult));
inputStream.close();
} catch (Exception e) {
log.error("音频文件OSS上传处理异常:", e);
}
log.info("OSS文件上传结束,返回文件OSS存储路径:{}", uploadKey);
return uploadKey;
}
public String encodeName(String name) {
return URLEncoder.DEFAULT.encode(name, StandardCharsets.UTF_8);
}
/**
* 获取OSS文件流
*/
public InputStream getObjectStream(String path) {
try {
OSSObject object = ossClient.getObject(bucket, path);
return object.getObjectContent();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}