UploadToOssUtil.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package com.fdkankan.site.common.util;
  2. import cn.hutool.core.collection.CollUtil;
  3. import com.aliyun.oss.OSSClient;
  4. import com.aliyun.oss.model.*;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.beans.factory.annotation.Value;
  7. import org.springframework.stereotype.Component;
  8. import java.io.*;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.stream.Collectors;
  12. @Slf4j
  13. @Component
  14. public class UploadToOssUtil {
  15. @Value("${oss.point:http://oss-cn-shenzhen-internal.aliyuncs.com}")
  16. private String point;
  17. @Value("${oss.key:LTAIUrvuHqj8pvry}")
  18. private String key;
  19. @Value("${oss.secrey:JLOVl0k8Ke0aaM8nLMMiUAZ3EiiqI4}")
  20. private String secrey;
  21. @Value("${oss.bucket:4dkankan}")
  22. private String bucket;
  23. /**
  24. * 获取文件内容-阿里云
  25. * @param objectName
  26. * @return
  27. */
  28. public boolean existKey(String objectName){
  29. //创建oss客户端
  30. OSSClient ossClient = new OSSClient(point, key, secrey);
  31. // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
  32. try{
  33. boolean exist = ossClient.doesObjectExist(bucket, objectName);
  34. return exist;
  35. }catch (Exception e){
  36. log.error("s4判断是否存在key异常,key=" + objectName, e);
  37. }finally {
  38. if(ossClient != null){
  39. ossClient.shutdown();
  40. }
  41. }
  42. return false;
  43. }
  44. /**
  45. * 从阿里云oss下载文件到本地
  46. * @param objectName 云端文件k地址
  47. * @param localPath 本地文件地址
  48. * @return
  49. */
  50. public boolean downFormAli(String objectName, String localPath){
  51. OSSClient ossClient = new OSSClient(point, key, secrey);
  52. try {
  53. GetObjectRequest request = new GetObjectRequest(bucket,objectName);
  54. File file = new File(localPath);
  55. if(!file.getParentFile().exists()){
  56. file.getParentFile().mkdirs();
  57. file = new File(localPath);
  58. }
  59. ossClient.getObject(request, file);
  60. return true;
  61. }catch (Exception e){
  62. log.error("阿里云oss文件下载失败,key=" + objectName, e);
  63. }finally {
  64. if(ossClient != null){
  65. ossClient.shutdown();
  66. }
  67. }
  68. return false;
  69. }
  70. public void uploadOss(String filePath, String key1){
  71. OSSClient ossClient = new OSSClient(point, key, secrey);
  72. try {
  73. log.info("upload-to-oss:file-path:{},oss-path:{}",filePath,key1);
  74. File file = new File(filePath);
  75. if (!file.exists()) {
  76. log.info("upload-to-oss:file-path:{},oss-path:{},filePath不存在!",filePath,key1);
  77. return;
  78. }
  79. ObjectMetadata metadata = new ObjectMetadata();
  80. ossClient.putObject(bucket, key1, new File(filePath), metadata);
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. } finally {
  84. ossClient.shutdown();
  85. }
  86. }
  87. public void delete(String objectName){
  88. OSSClient ossClient = new OSSClient(point, key, secrey);
  89. try {
  90. ossClient.deleteObject(bucket, objectName);
  91. } catch (Exception e) {
  92. log.error("OSS删除文件失败,key=" + objectName);
  93. }finally {
  94. if(ossClient != null){
  95. ossClient.shutdown();
  96. }
  97. }
  98. }
  99. /**
  100. * 获得文件列表-阿里云
  101. * @return
  102. */
  103. public List<String> listKeysFromAli(String sourcePath) {
  104. List<String> keyList = new ArrayList<>();
  105. OSSClient ossClient = new OSSClient(point, key, secrey);
  106. try {
  107. boolean flag = true;
  108. String nextMaker = null;
  109. ListObjectsRequest listObjectsRequest = new ListObjectsRequest(this.bucket);
  110. //指定下一级文件
  111. listObjectsRequest.setPrefix(sourcePath);
  112. //设置分页的页容量
  113. listObjectsRequest.setMaxKeys(200);
  114. do
  115. {
  116. //获取下一页的起始点,它的下一项
  117. listObjectsRequest.setMarker(nextMaker);
  118. ObjectListing objectListing = ossClient.listObjects(listObjectsRequest);
  119. List<OSSObjectSummary> objectSummaries = objectListing.getObjectSummaries();
  120. List<String> collect = objectSummaries.stream().map(summary -> {
  121. return summary.getKey();
  122. }).collect(Collectors.toList());
  123. if(CollUtil.isNotEmpty(collect)){
  124. keyList.addAll(collect);
  125. }
  126. nextMaker = objectListing.getNextMarker();
  127. //全部执行完后,为false
  128. flag = objectListing.isTruncated();
  129. } while (flag);
  130. }catch (Exception e){
  131. log.error("获取文件列表失败,path="+sourcePath, e);
  132. }finally {
  133. if(ossClient != null){
  134. ossClient.shutdown();
  135. }
  136. }
  137. ossClient.shutdown();
  138. return keyList;
  139. }
  140. /**
  141. * 获取文件内容-阿里云
  142. * @param bucketName
  143. * @param objectName
  144. * @return
  145. */
  146. public String getObjectContent(String bucketName, String objectName){
  147. //创建oss客户端
  148. OSSClient ossClient = new OSSClient(point, key, secrey);
  149. InputStream objectContent = null;
  150. StringBuilder contentJson = new StringBuilder();
  151. try {
  152. // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
  153. OSSObject ossObject = ossClient.getObject(bucketName, objectName);
  154. objectContent = ossObject.getObjectContent();
  155. try(BufferedReader reader = new BufferedReader(new InputStreamReader(objectContent))){
  156. while (true) {
  157. String line = reader.readLine();
  158. if (line == null) break;
  159. contentJson.append(line);
  160. }
  161. } catch (IOException e) {
  162. log.error("读取scene.json文件流失败", e);
  163. }
  164. }catch (Exception e){
  165. log.error("s3获取文件内容失败,key="+objectName, e);
  166. }finally {
  167. if(ossClient != null){
  168. ossClient.shutdown();
  169. }
  170. }
  171. return contentJson.toString();
  172. }
  173. public void uploadFileOss(File file) {
  174. if(file.isFile()){
  175. String ossPath = file.getPath();
  176. ossPath = ossPath.replace("/mnt/","");
  177. ossPath = ossPath.replace("\\","/");
  178. this.uploadOss(file.getPath(),ossPath);
  179. }else {
  180. File[] files = file.listFiles();
  181. for (File file1 : files) {
  182. uploadFileOss(file1);
  183. }
  184. }
  185. }
  186. }