import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GetObjectRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;
/**
* 对象存储OSS的相关操作
* @author ruanjiayu
* @dateTime 2019/7/16 15:53
*/
@Component
@Slf4j
public class OssUtils {
private static String END_POINT;
private static String ACCESS_KEY_ID;
private static String ACCESS_KEY_SECRET;
/**所属的桶*/
private static String BUCKET_NAME;
@Value("${oss.endpoint}")
private void setEndPoint(String endPoint){
END_POINT = endPoint;
}
@Value("${oss.accessKeyId}")
private void setAccessKeyId(String accessKeyId){
ACCESS_KEY_ID = accessKeyId;
}
@Value("${oss.accessKeySecret}")
private void setAccessKeySecret(String accessKeySecret){
ACCESS_KEY_SECRET = accessKeySecret;
}
@Value("${oss.bucketName}")
private void setBucketName(String bucketName){
BUCKET_NAME = bucketName;
}
/**
* 创建一个OSS客户端连接器
* @return OSS客户端
*/
private static OSS createOSSClient(){
String endpoint = END_POINT;
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = ACCESS_KEY_ID;
String accessKeySecret = ACCESS_KEY_SECRET;
// 创建OSSClient实例。
return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
}
/**
* 上传本地文件到OSS
* @param key 放置指定的位置的文件名字。如:IM/2.jpg
* @param filePath 本地照片的位置。 如:E:\images\image.jpg
*/
public static void uploadFileLocal(String key,String filePath){
// 创建OSSClient实例。
OSS ossClient = createOSSClient();
// 上传文件。
ossClient.putObject(BUCKET_NAME, key, new File(filePath));
// 关闭OSSClient。
ossClient.shutdown();
}
/**
* 通过文件流来上传文件
* @param key 放置云端位置的文件名字。如:IM/2.jpg
* @param inputStream 文件流
*/
public static void uploadFileStream(String key, InputStream inputStream){
// 创建OSSClient实例。
OSS ossClient = createOSSClient();
// 上传文件
ossClient.putObject(BUCKET_NAME, key,inputStream);
// 关闭OSSClient。
ossClient.shutdown();
}
/**
* 下载文件
* @param objectName 云端文件的名字。如:IM/2.jpg
* @param filePath 指定文件下载在本地哪里。 如:E:\images\image.jpg
*/
public static void downloadFile(String objectName,String filePath){
// 创建OSSClient实例。
OSS ossClient = createOSSClient();
// 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
ossClient.getObject(new GetObjectRequest(BUCKET_NAME, objectName), new File(filePath));
// 关闭OSSClient。
ossClient.shutdown();
}
/**
* 删除指定的文件
* @param objectName 云端文件的名字。如:IM/2.jpg
*/
public static void removeFile(String objectName){
// 创建OSSClient实例。
OSS ossClient = createOSSClient();
// 删除文件。
ossClient.deleteObject(BUCKET_NAME, objectName);
// 关闭OSSClient。
ossClient.shutdown();
}
/**
* 获取上传文件的url
* @param key 上传在桶内地址bucket_name
*/
public static String getFileUrl(String key){
// 设置时间
Calendar c = Calendar.getInstance();
c.setTime(new Date());
//表示你需要的年数
int reduceYear = 20;
c.add(Calendar.YEAR,reduceYear);
Date expiration = c.getTime();
// 创建OSSClient实例。
OSS ossClient = createOSSClient();
// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
URL url = ossClient.generatePresignedUrl(BUCKET_NAME, key, expiration);
// 关闭OSSClient。
ossClient.shutdown();
return url.toString();
}
}
版权声明:本文为qq_41967899原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。