UploadToOssUtil.java 6.6 KB

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