|
|
@@ -8,6 +8,7 @@ import com.aliyun.oss.model.Bucket;
|
|
|
import com.aliyun.oss.model.PutObjectRequest;
|
|
|
import com.njuzr.seecoderfiles.exception.MyServiceException;
|
|
|
import lombok.Data;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
@@ -23,6 +24,7 @@ import java.util.Date;
|
|
|
*/
|
|
|
|
|
|
@Component
|
|
|
+@Slf4j
|
|
|
@Data
|
|
|
public class OSSUtils {
|
|
|
@Value("${aliyun.oss.endpoint}")
|
|
|
@@ -37,13 +39,16 @@ public class OSSUtils {
|
|
|
@Value("${aliyun.oss.bucketName}")
|
|
|
private String bucketName;
|
|
|
|
|
|
+ @Value("${aliyun.oss.urlPrefix}")
|
|
|
+ private String urlPrefix;
|
|
|
+
|
|
|
private long objectUrlLivingSeconds;
|
|
|
private String objectUrlCacheName;
|
|
|
|
|
|
/**
|
|
|
- * 上传文件
|
|
|
- * @param objectName
|
|
|
- * @param inputStream
|
|
|
+ * 上传文件,一般是学生的图片
|
|
|
+ * @param objectName 文件名
|
|
|
+ * @param inputStream 文件输入流
|
|
|
*/
|
|
|
public void upload(String objectName, InputStream inputStream) {
|
|
|
OSS ossClient = getOss();
|
|
|
@@ -60,20 +65,21 @@ public class OSSUtils {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获得上传文件的暂时性url
|
|
|
- * @param objectName
|
|
|
- * @return
|
|
|
+ * 异步删除上传的文件
|
|
|
+ * @param objectName 文件名
|
|
|
*/
|
|
|
- public String getUrl(String objectName) {
|
|
|
+ @Async
|
|
|
+ public void delete(String objectName) {
|
|
|
OSS ossClient = getOss();
|
|
|
- Date expiration = new Date(System.currentTimeMillis() + 1200 * 1000);
|
|
|
try {
|
|
|
-
|
|
|
- URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
|
|
|
- String objectUrl = url.toString();
|
|
|
- return objectUrl;
|
|
|
+ boolean exist = ossClient.doesObjectExist(bucketName, objectName);
|
|
|
+ if(!exist) { //判断文件是否存在,如果不判断,不会被捕捉到异常
|
|
|
+ log.error(objectName+"不存在");
|
|
|
+ throw new MyServiceException("500", "文件不存在");
|
|
|
+ }
|
|
|
+ ossClient.deleteObject(bucketName, objectName);
|
|
|
} catch (OSSException | ClientException e) {
|
|
|
- throw new MyServiceException("500", "获取文件链接失败");
|
|
|
+ throw new MyServiceException("500", "文件删除失败");
|
|
|
} finally {
|
|
|
if (ossClient != null) {
|
|
|
ossClient.shutdown();
|
|
|
@@ -81,12 +87,20 @@ public class OSSUtils {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void copy(String sourceObjectName, String destinationObjectName) {
|
|
|
+ /**
|
|
|
+ * 设置时间戳,获得临时图片URL
|
|
|
+ * @param objectName 文件名
|
|
|
+ * @return 图片临时URL
|
|
|
+ */
|
|
|
+ public String getUrl(String objectName) {
|
|
|
OSS ossClient = getOss();
|
|
|
+ Date expiration = new Date(System.currentTimeMillis() + 1200 * 1000);
|
|
|
try {
|
|
|
- ossClient.copyObject(bucketName, sourceObjectName, bucketName, destinationObjectName);
|
|
|
+
|
|
|
+ URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
|
|
|
+ return url.toString();
|
|
|
} catch (OSSException | ClientException e) {
|
|
|
- throw new MyServiceException("501", "文件复制失败");
|
|
|
+ throw new MyServiceException("500", "获取文件链接失败");
|
|
|
} finally {
|
|
|
if (ossClient != null) {
|
|
|
ossClient.shutdown();
|
|
|
@@ -95,16 +109,16 @@ public class OSSUtils {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 异步删除上传的文件
|
|
|
- * @param objectName
|
|
|
+ * 复制文件
|
|
|
+ * @param sourceObjectName 原文件名
|
|
|
+ * @param destinationObjectName 目标文件名
|
|
|
*/
|
|
|
- @Async
|
|
|
- public void delete(String objectName) {
|
|
|
+ public void copy(String sourceObjectName, String destinationObjectName) {
|
|
|
OSS ossClient = getOss();
|
|
|
try {
|
|
|
- ossClient.deleteObject(bucketName, objectName);
|
|
|
+ ossClient.copyObject(bucketName, sourceObjectName, bucketName, destinationObjectName);
|
|
|
} catch (OSSException | ClientException e) {
|
|
|
- throw new MyServiceException("500", "文件删除失败");
|
|
|
+ throw new MyServiceException("501", "文件复制失败");
|
|
|
} finally {
|
|
|
if (ossClient != null) {
|
|
|
ossClient.shutdown();
|
|
|
@@ -114,7 +128,7 @@ public class OSSUtils {
|
|
|
|
|
|
/**
|
|
|
* 创建新的bucket
|
|
|
- * @param bucketName
|
|
|
+ * @param bucketName bucket名称
|
|
|
*/
|
|
|
public void createBucket(String bucketName){
|
|
|
OSS ossClient = getOss();
|
|
|
@@ -133,7 +147,7 @@ public class OSSUtils {
|
|
|
|
|
|
/**
|
|
|
* 私有方法,获得OSS对象
|
|
|
- * @return
|
|
|
+ * @return OSS对象
|
|
|
*/
|
|
|
private OSS getOss() {
|
|
|
return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|