2021SC@SDUSC
阿里云对象存储服务(Object Storage Service,简称OSS)为您提供基于网络的数据存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。
Oss支持任意类型的文件远程存储(文件类型包括但不仅限于图片,视频,文字),可以通过网络上传或下载分享,有着高性能,安全,稳定的特性。在本项目中用到了oss用于照片、视频等的远程存储。
进行OSS配置。
pom文件添加依赖:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.1.0</version>
</dependency>
配置信息:
config.properties 配置文件信息,value值根据自己实际情况补充完整
# Aliyun Config
aliyun.oss.accessKeyId=
aliyun.oss.accessKeySecret=
# Aliyun OSS Config
aliyun.oss.endpoint=
aliyun.oss.bucketName=
aliyun.oss.folder=""
然后将工具类代码导入到项目中。(代码过长就不copy过来了,在阿里云OSS中可以查到)
实用工具类上传文件
OSSClient ossclient = OSSClientUtil.getOSSClient();
//提供相应类型的参数
OSSClientUtil.uploadObject2OSS(ossclient, toFile, OSSClientUtil.bucketName, inputPosition);
上传文件至阿里云OSS,文件上传成功,返回文件完整访问路径,文件上传失败则返回null。
其中file表示带上传文件,fileDir代表文件保存目录,最后返回oss中的相对文件路径。
public class OssBootUtil {
private static String endPoint;
private static String accessKeyId;
private static String accessKeySecret;
private static String bucketName;
private static String staticDomain;
public static String upload(MultipartFile file, String fileDir,String customBucket) {
String FILE_URL = null;
initOSS(endPoint, accessKeyId, accessKeySecret);
StringBuilder fileUrl = new StringBuilder();
String newBucket = bucketName;
if(oConvertUtils.isNotEmpty(customBucket)){
newBucket = customBucket;
}
try {
//判断桶是否存在,不存在则创建桶
if(!ossClient.doesBucketExist(newBucket)){
ossClient.createBucket(newBucket);
}
// 获取文件名
String orgName = file.getOriginalFilename();
if("" == orgName){
orgName=file.getName();
}
orgName = CommonUtils.getFileName(orgName);
String fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.indexOf("."));
if (!fileDir.endsWith("/")) {
fileDir = fileDir.concat("/");
}
fileUrl = fileUrl.append(fileDir + fileName);
if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) {
FILE_URL = staticDomain + "/" + fileUrl;
} else {
FILE_URL = "https://" + newBucket + "." + endPoint + "/" + fileUrl;
}
PutObjectResult result = ossClient.putObject(newBucket, fileUrl.toString(), file.getInputStream());
// 设置权限(公开读)
// ossClient.setBucketAcl(newBucket, CannedAccessControlList.PublicRead);
if (result != null) {
log.info("------OSS文件上传成功------" + fileUrl);
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
return FILE_URL;
}
/**
* 文件上传
* @param file
* @param fileDir
* @return
*/
public static String upload(MultipartFile file, String fileDir) {
return upload(file, fileDir,null);
}
删除文件函数
public static void deleteUrl(String url) {
deleteUrl(url,null);
}
public static void deleteUrl(String url,String bucket) {
String newBucket = bucketName;
if(oConvertUtils.isNotEmpty(bucket)){
newBucket = bucket;
}
String bucketUrl = "";
if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) {
bucketUrl = staticDomain + "/" ;
} else {
bucketUrl = "https://" + newBucket + "." + endPoint + "/";
}
url = url.replace(bucketUrl,"");
ossClient.deleteObject(newBucket, url);
}
获取文件流
public static InputStream getOssFile(String objectName){
return getOssFile(objectName,null);
}
获取文件外链
public static String getObjectURL(String bucketName, String objectName, Date expires) {
initOSS(endPoint, accessKeyId, accessKeySecret);
try{
if(ossClient.doesObjectExist(bucketName,objectName)){
URL url = ossClient.generatePresignedUrl(bucketName,objectName,expires);
return URLDecoder.decode(url.toString(),"UTF-8");
}
}catch (Exception e){
log.info("文件路径获取失败" + e.getMessage());
}
return null;
}