|
|
@@ -27,37 +27,10 @@ import java.util.List;
|
|
|
@Slf4j
|
|
|
@Component
|
|
|
public class AliyunOss {
|
|
|
- private OSS ossClient;
|
|
|
- private final AliyunAccountRepository aliyunAccountRepository;
|
|
|
-
|
|
|
- public AliyunOss(AliyunAccountRepository aliyunAccountRepository) {
|
|
|
- this.aliyunAccountRepository = aliyunAccountRepository;
|
|
|
- }
|
|
|
-
|
|
|
- public OSS getOssClient() {
|
|
|
- if (ossClient == null) {
|
|
|
- AliyunAccount aliyunAccount = aliyunAccountRepository.findByType("oss").stream().findFirst().orElse(null);
|
|
|
- String endpoint = aliyunAccount.getEndpoint();
|
|
|
- String accessKeyId = aliyunAccount.getRepoAuthConfig().getUsername();
|
|
|
- String accessKeySecret = aliyunAccount.getRepoAuthConfig().getPassword();
|
|
|
- ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
|
|
- }
|
|
|
-
|
|
|
- return ossClient;
|
|
|
- }
|
|
|
-
|
|
|
public OSS getOssClient(String endpoint, String accessKeyId, String accessKeySecret) {
|
|
|
return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
|
|
}
|
|
|
|
|
|
- public void uploadObject(String bucketName, String objectName, File file) throws IOException {
|
|
|
- PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, file);
|
|
|
- /*ObjectMetadata objectMetadata = new ObjectMetadata();
|
|
|
- objectMetadata.setObjectAcl(CannedAccessControlList.PublicRead);
|
|
|
- putObjectRequest.setMetadata(objectMetadata);*/
|
|
|
- getOssClient().putObject(putObjectRequest);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 将指定目录中的所有文件上传到 oss 根目录
|
|
|
*
|
|
|
@@ -65,18 +38,18 @@ public class AliyunOss {
|
|
|
* @return
|
|
|
* @date 2025-06-05 16:05:45
|
|
|
*/
|
|
|
- public List<String> uploadDir(String bucketName, String localDir) {
|
|
|
+ public List<String> uploadDir(OSS ossClient, String bucketName, String localDir) {
|
|
|
List<String> failedList = new ArrayList<>();
|
|
|
try {
|
|
|
- walkDir(bucketName, Path.of(localDir), failedList);
|
|
|
+ walkDir(ossClient, bucketName, Path.of(localDir), failedList);
|
|
|
} catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
+ log.error(e.getMessage(), e);
|
|
|
}
|
|
|
|
|
|
return failedList;
|
|
|
}
|
|
|
|
|
|
- private void walkDir(String bucketName, Path path, List<String> failedList) throws IOException {
|
|
|
+ private void walkDir(OSS ossClient, String bucketName, Path path, List<String> failedList) throws IOException {
|
|
|
final String BLANK = "";
|
|
|
if (path.toString().equals(BLANK)) {
|
|
|
throw new IOException("CAN NOT specify a BLANK path");
|
|
|
@@ -90,7 +63,7 @@ public class AliyunOss {
|
|
|
|
|
|
@Override
|
|
|
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
|
|
|
- uploadObject(bucketName, file.toFile(), path.toString(), failedList);
|
|
|
+ uploadObject(ossClient, bucketName, file.toFile(), path.toString(), failedList);
|
|
|
return FileVisitResult.CONTINUE;
|
|
|
}
|
|
|
|
|
|
@@ -106,22 +79,26 @@ public class AliyunOss {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- private void uploadObject(String bucketName, File file, String baseDir, List<String> failedList) {
|
|
|
+ private void uploadObject(OSS ossClient, String bucketName, File file, String baseDir, List<String> failedList) {
|
|
|
String absolutePath = file.getAbsolutePath();
|
|
|
String objectName = absolutePath.replace(baseDir + "/", "");
|
|
|
try {
|
|
|
- uploadObject(bucketName, objectName, file);
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
+ PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, file);
|
|
|
+ /*ObjectMetadata objectMetadata = new ObjectMetadata();
|
|
|
+ objectMetadata.setObjectAcl(CannedAccessControlList.PublicRead);
|
|
|
+ putObjectRequest.setMetadata(objectMetadata);*/
|
|
|
+ ossClient.putObject(putObjectRequest);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(e.getMessage(), e);
|
|
|
failedList.add(file.getAbsolutePath());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void deleteObject(String bucketName, String objectName) {
|
|
|
- getOssClient().deleteObject(bucketName, objectName);
|
|
|
+ public void deleteObject(OSS ossClient, String bucketName, String objectName) {
|
|
|
+ ossClient.deleteObject(bucketName, objectName);
|
|
|
}
|
|
|
|
|
|
- public void deleteObjects(String bucketName, String prefix) {
|
|
|
+ public void deleteObjects(OSS ossClient, String bucketName, String prefix) {
|
|
|
// 删除目录及目录下的所有文件
|
|
|
String nextMarker = null;
|
|
|
ObjectListing objectListing = null;
|
|
|
@@ -129,16 +106,15 @@ public class AliyunOss {
|
|
|
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName)
|
|
|
.withPrefix(prefix)
|
|
|
.withMarker(nextMarker);
|
|
|
- objectListing = getOssClient().listObjects(listObjectsRequest);
|
|
|
+ objectListing = ossClient.listObjects(listObjectsRequest);
|
|
|
if (objectListing.getObjectSummaries().size() > 0) {
|
|
|
List<String> keys = new ArrayList<>();
|
|
|
for (OSSObjectSummary s : objectListing.getObjectSummaries()) {
|
|
|
- log.info("key name in bucket {} -> {}", bucketName, s.getKey());
|
|
|
+ //log.info("key name in bucket {} -> {}", bucketName, s.getKey());
|
|
|
keys.add(s.getKey());
|
|
|
}
|
|
|
-
|
|
|
/*DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName).withKeys(keys).withEncodingType("url");
|
|
|
- DeleteObjectsResult deleteObjectsResult = getOssClient().deleteObjects(deleteObjectsRequest);
|
|
|
+ DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(deleteObjectsRequest);
|
|
|
List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
|
|
|
for(String obj : deletedObjects) {
|
|
|
String deleteObj = URLDecoder.decode(obj, StandardCharsets.UTF_8);
|
|
|
@@ -146,20 +122,20 @@ public class AliyunOss {
|
|
|
log.info("delete object {} in bucket {}", deleteObj, bucketName);
|
|
|
}*/
|
|
|
}
|
|
|
-
|
|
|
nextMarker = objectListing.getNextMarker();
|
|
|
} while (objectListing.isTruncated());
|
|
|
}
|
|
|
|
|
|
public String getSignedUrl(String bucketName, String objectName) {
|
|
|
+ OSS ossClient = null;
|
|
|
int expireSecond = 3600;
|
|
|
long timestamp = System.currentTimeMillis() + expireSecond*1000L;
|
|
|
Date expiration = new Date(timestamp);
|
|
|
- URL url = getOssClient().generatePresignedUrl(bucketName, objectName, expiration);
|
|
|
+ URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
|
|
|
return url.toString();
|
|
|
}
|
|
|
|
|
|
- public void close() {
|
|
|
- getOssClient().shutdown();
|
|
|
+ public void close(OSS ossClient) {
|
|
|
+ ossClient.shutdown();
|
|
|
}
|
|
|
}
|