一、引言
阿里的oss对象存储服务器,提供了存储空间管理,文件上传下载,文件管理,音频与图像处理等常用操作,基本满足中小企业对于文件处理的需求,但官方提供的Api接口都是简版,demo级别的,并不适合直接使用,故在下在工作之余,对其常用Api进行封装,集成为OssUtils工具类。
二、Oss基本配置
阿里官网推举用子access_key_id和access_key_secrt,而不采用全局配置
/**
* 对象存储Oss工具类
*
* @author sunyiran
* @date 2018-11-07
*/
@Slf4j
public class OssUtils {
/**
* 连接URL
*/
private static final String ENDPOINT = "XXXX";
/**
* 实例ID
*/
private static final String ACCESS_KEY_ID = "XXXX";
/**
* 实例密钥
*/
private static final String ACCESS_KEY_SECRET = "XXXX";
/**
* 默认存储空间
*/
private static final String DEFAULT_BUCKETNAME = "syr-test";
/**
* 默认图片格式
*/
private static final String DEFAULT_IMAGE_TYPE = "png";
/**
* 默认压缩比例
*/
private static final int DEFAULT_SCALE = 10;
/**
* 默认水印文字
*/
private static final String DEFAULT_CONTENT = "我的水印";
/**
* 连接实例
*/
private static final OSSClient OSS_CLIENT;
private static final String SUCCESS = "success";
private static final String FAILED = "failed";
static {
// 创建ClientConfiguration实例,按照您的需要修改默认参数。
ClientConfiguration conf = new ClientConfiguration();
// 关闭CNAME选项。
conf.setSupportCname(false);
OSS_CLIENT = new OSSClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET, conf);
}
}
三、管理存储空间
采用不同的存储空间可以讲文件分类别存储,它具有创建,列举,获取详情,删除等操作。
/**
* 存储空间管理工具
*/
public static class BucketUtils {
/**
* 创建新的存储空间
*
* @param bucketName
*/
public static String createBucket(String bucketName) {
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
// 设置存储空间的权限为公共读,默认是私有。
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
// 设置存储空间的存储类型为低频访问类型,默认是标准类型。
createBucketRequest.setStorageClass(StorageClass.IA);
try {
OSS_CLIENT.createBucket(createBucketRequest);
return SUCCESS;
} catch (OSSException e) {
log.error(e.getMessage());
return FAILED;
}
}
/**
* 列举存储空间
*
* @param bucketPrefix
*/
public static List<Bucket> listBucket(String bucketPrefix) {
ListBucketsRequest listBucketsRequest = new ListBucketsRequest();
// 列举指定前缀的存储空间。
if (StringUtils.isNotBlank(bucketPrefix)) {
listBucketsRequest.setPrefix(bucketPrefix);
}
try {
return OSS_CLIENT.listBuckets(listBucketsRequest).getBucketList();
} catch (OSSException e) {
log.error(e.getMessage());
return null;
}
}
/**
* 获取存储空间信息
*
* @param bucketName
*/
public static Map getBucketInfo(String bucketName) {
//判断空间是否存在
boolean exists = OSS_CLIENT.doesBucketExist(bucketName);
if (!exists) {
return null;
}
// 存储空间的信息包括地域(Region或Location)、创建日期(CreationDate)、拥有者(Owner)、权限(Grants)等。
Map<String, Object> result = new HashMap<>(