AliOSSUtils.java 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package com.lqkj.link.util;
  2. import com.aliyun.oss.OSS;
  3. import com.aliyun.oss.OSSClientBuilder;
  4. import com.aliyun.oss.model.ListObjectsV2Request;
  5. import com.aliyun.oss.model.ListObjectsV2Result;
  6. import com.aliyun.oss.model.OSSObjectSummary;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Component;
  9. import org.springframework.web.multipart.MultipartFile;
  10. import java.io.File;
  11. import java.io.FileInputStream;
  12. import java.io.IOException;
  13. import java.io.InputStream;
  14. import java.time.LocalDate;
  15. import java.time.LocalDateTime;
  16. import java.time.LocalTime;
  17. import java.time.LocalDate;
  18. import java.util.List;
  19. import java.util.UUID;
  20. import java.util.concurrent.Callable;
  21. @Component
  22. public class AliOSSUtils {
  23. /**
  24. * 注入AliProperties
  25. */
  26. private final AliProperties aliProperties;
  27. private final ThreadPoolUtil threadPoolUtil;
  28. public AliOSSUtils(AliProperties aliProperties, ThreadPoolUtil threadPoolUtil) {
  29. this.aliProperties = aliProperties;
  30. this.threadPoolUtil = threadPoolUtil;
  31. }
  32. /**
  33. * 实现上传图片到OSS
  34. */
  35. public String upload(File file) {
  36. String originalFilename = file.getName();
  37. String fileName = "file/" + LocalDate.now() + "/" + UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
  38. //上传文件到 OSS
  39. try {
  40. Thread.sleep(200);
  41. } catch (InterruptedException e) {
  42. throw new RuntimeException(e);
  43. }
  44. OSS ossClient = new OSSClientBuilder().build(aliProperties.getEndpoint(), aliProperties.getAccessKeyId(), aliProperties.getAccessKeySecret());
  45. threadPoolUtil.getTaskExecutor().execute(() -> {
  46. ossClient.putObject(aliProperties.getBucketName(), fileName, file);
  47. ossClient.shutdown();
  48. });
  49. //文件访问路径
  50. String url = aliProperties.getOsspath().split("//")[0] + "//" + aliProperties.getBucketName() + "." + aliProperties.getOsspath().split("//")[1] + "/" + fileName;
  51. // 关闭ossClient
  52. return url;// 把上传到oss的路径返回
  53. }
  54. public String upload(MultipartFile file) throws IOException {
  55. // 获取上传的文件的输入流
  56. try {
  57. InputStream inputStream = file.getInputStream();
  58. // 避免文件覆盖
  59. String originalFilename = file.getOriginalFilename();
  60. String fileName = "file/" + LocalDate.now() + "/" + UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
  61. //上传文件到 OSS
  62. OSS ossClient = new OSSClientBuilder().build(aliProperties.getEndpoint(), aliProperties.getAccessKeyId(), aliProperties.getAccessKeySecret());
  63. threadPoolUtil.getTaskExecutor().execute(() -> {
  64. ossClient.putObject(aliProperties.getBucketName(), fileName, inputStream);
  65. ossClient.shutdown();
  66. });
  67. //文件访问路径
  68. return aliProperties.getOsspath().split("//")[0] + "//" + aliProperties.getBucketName() + "." + aliProperties.getOsspath().split("//")[1] + "/" + fileName;
  69. } catch (IOException e) {
  70. throw new RuntimeException(e);
  71. }
  72. }
  73. public String addModel(MultipartFile file, String path) {
  74. // 获取上传的文件的输入流
  75. try {
  76. InputStream inputStream = file.getInputStream();
  77. // 避免文件覆盖
  78. String originalFilename = file.getOriginalFilename();
  79. String fileName = path + UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
  80. //上传文件到 OSS
  81. OSS ossClient = new OSSClientBuilder().build(aliProperties.getEndpoint(), aliProperties.getAccessKeyId(), aliProperties.getAccessKeySecret());
  82. threadPoolUtil.getTaskExecutor().execute(() -> {
  83. ossClient.putObject(aliProperties.getBucketName(), fileName, inputStream);
  84. ossClient.shutdown();
  85. });
  86. //文件访问路径
  87. return aliProperties.getOsspath().split("//")[0] + "//" + aliProperties.getBucketName() + "." + aliProperties.getOsspath().split("//")[1] + "/" + fileName;
  88. } catch (IOException e) {
  89. throw new RuntimeException(e);
  90. }
  91. }
  92. public Long ossCheckCapacity(String path) {
  93. OSS ossClient = new OSSClientBuilder().build(aliProperties.getEndpoint(), aliProperties.getAccessKeyId(), aliProperties.getAccessKeySecret());
  94. return calculateFolderLength(ossClient, aliProperties.getBucketName(), path);
  95. }
  96. private static long calculateFolderLength(OSS ossClient, String bucketName, String folder) {
  97. long size = 0L;
  98. ListObjectsV2Result result = null;
  99. do {
  100. // MaxKey默认值为100,最大值为1000。
  101. ListObjectsV2Request request = new ListObjectsV2Request(bucketName).withPrefix(folder).withMaxKeys(1000);
  102. if (result != null) {
  103. request.setContinuationToken(result.getNextContinuationToken());
  104. }
  105. result = ossClient.listObjectsV2(request);
  106. List<OSSObjectSummary> sums = result.getObjectSummaries();
  107. for (OSSObjectSummary s : sums) {
  108. size += s.getSize();
  109. }
  110. } while (result.isTruncated());
  111. return size;
  112. try {
  113. InputStream inputStream = file.getInputStream();
  114. // 避免文件覆盖
  115. String originalFilename = file.getOriginalFilename();
  116. String fileName = "file/" + LocalDate.now() + "/" + UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
  117. //上传文件到 OSS
  118. OSS ossClient = new OSSClientBuilder().build(aliProperties.getEndpoint(), aliProperties.getAccessKeyId(), aliProperties.getAccessKeySecret());
  119. threadPoolUtil.getTaskExecutor().execute(() -> {
  120. ossClient.putObject(aliProperties.getBucketName(), fileName, inputStream);
  121. ossClient.shutdown();
  122. });
  123. //文件访问路径
  124. return aliProperties.getOsspath().split("//")[0] + "//" + aliProperties.getBucketName() + "." + aliProperties.getOsspath().split("//")[1] + "/" + fileName;
  125. } catch (IOException e) {
  126. throw new RuntimeException(e);
  127. }
  128. }
  129. public void deleteModel(String path) {
  130. OSS ossClient = new OSSClientBuilder().build(aliProperties.getEndpoint(), aliProperties.getAccessKeyId(), aliProperties.getAccessKeySecret());
  131. String prefix = aliProperties.getOsspath().split("//")[0] + "//" + aliProperties.getBucketName() + "." + aliProperties.getOsspath().split("//")[1] + "/";
  132. ossClient.deleteObject(aliProperties.getBucketName(), path.replace(prefix, ""));
  133. }
  134. }