申请OSS
第一步是我们需要去阿里云的空间申请oss的使用空间
这里是创建自己的bucket,选择离自己靠近的地域点,原理上访问会加快。
获取id和key
这里点击头像的获取key
这里为了安全我们可以使用阿里云推荐的子账户来赋予权限,避免权限的泄露。
创建用户
这里可以随意的命名账户登录信息,是为了给分配的人员进RAm方式进行登录的
权限赋予
这里可以给两个,一个是管理oss的 AliyunOSSFullAccess,一个为监AliyunCloudMonitorFullAccess,
key生成
点击用户信息中的创建key,之后进行验证后会弹出key记载下来就好。
参数连接
上面我们是一件建立好了oss的id和key,下面我们需要进行参数的配置
这边呢是我们需要的一些参数,第一个参数是我的域名
第二个是我们选的地域节点的point值
这个值我们需要对应,文档在 https://helpcdn.aliyun.com/document_detail/31837.htm?spm=a2c4g.11186623.2.4.bd2e53383V0RGV#concept-zt4-cvy-5db中,这个也是阿里的oss技术参考文档。
id和key则为我们刚才的用户id和key
其中的prefix则相当于文件路径
bucketName则是当前的bucke节点
代码实现
import java.util.UUID;
/**
* @Author: zqy
* @Date: 2019/8/21 18:43
*/
@Service
@Slf4j
public class AliyunOssServiceImpl implements AliyunOssService {
private OSSClient client;
@Value("${aliyun.oss.domain}")
private String aliyunDomain;
@Value("${aliyun.oss.endPoint}")
private String aliyunEndPoint;
@Value("${aliyun.oss.accessKeyId}")
private String aliyunAccessKeyId;
@Value("${aliyun.oss.accessKeySecret}")
private String aliyunAccessKeySecret;
@Value("${aliyun.oss.prefix}")
private String aliyunPrefix;
@Value("${aliyun.oss.bucketName}")
private String aliyunBucketName;
// 这边进行初始化的连接
@PostConstruct
public void init() {
client = new OSSClient(aliyunEndPoint, aliyunAccessKeyId, aliyunAccessKeySecret);
}
// 这边的data是文件的二进制流
@Override
public String uploadSuffix(byte[] , String suffix) {
// 更新路径,这边如果oss不存在会自动生成
return upload(data, getPath(aliyunPrefix, suffix));
}
/**
* 删除文件
* @param url
* @return
*/
@Override
public void deleteFile(String url) {
try {
//aliyunBucketName指的是节点,url则不能包含节点
/* 如https://liu123-test.oss-cn-shanghai.aliyuncs.com/testdev/20210816/cbc161d17f8c45269d5393513e99159b.mp4需要删除的话需要testdev/20210816/cbc161d17f8c45269d5393513e99159b.mp这样就行
*/
client.deleteObject(aliyunBucketName, url);;
} catch (Exception e){
e.printStackTrace();
throw new FileException(ErrorCodeFile.ERROR_FILE_UPLOAD);
}
}
/**
* 文件路径
* @param prefix 前缀
* @param suffix 后缀
* @return 返回上传路径
*/
public String getPath(String prefix, String suffix) {
//生成uuid
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
//文件路径
String path = new SimpleDateFormat("yyyyMMdd").format(new Date()) + "/" + uuid;
if(StringUtils.isNotBlank(prefix)){
path = prefix + "/" + path;
}
return path + suffix;
}
}
我这个没有进行关闭,单个的话需要进行关闭