AliyunOSSUtil.java 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. package com.cnd3b.utility.aliyun.oss;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.aliyun.oss.HttpMethod;
  5. import com.aliyun.oss.OSS;
  6. import com.aliyun.oss.OSSClientBuilder;
  7. import com.aliyun.oss.model.*;
  8. import com.cnd3b.common.parameter.parameter;
  9. import java.io.ByteArrayInputStream;
  10. import java.io.UnsupportedEncodingException;
  11. import java.net.URL;
  12. import java.net.URLDecoder;
  13. import java.sql.Date;
  14. import java.util.ArrayList;
  15. import java.util.Base64;
  16. import java.util.List;
  17. public class AliyunOSSUtil {
  18. //仓库名称-培训学习
  19. // public static final String BUCKE_NAME_1 = "jssx";
  20. //仓库名称-培训学习测试用
  21. public static final String BUCKE_NAME_1 = parameter.oss_bucke_name();
  22. //地域节点
  23. public static final String END_POINT = "oss-cn-hangzhou.aliyuncs.com";
  24. //AccessKey ID 阿里云AccessKey
  25. public static final String AccessKey_ID = "LTAI5t5mBLk8DbrVNZuQFPCP";
  26. //Access Key Secret 阿里云Secret
  27. public static final String AccessKey_Secret = "KWZjSffg8LuVMXWYP7LMeV4qCGm9x0";
  28. //外网访问
  29. public static final String file_url = BUCKE_NAME_1 + "." + END_POINT;
  30. /**
  31. * 创建文件夹,路径以反斜杠结尾:test/
  32. *
  33. * @return
  34. */
  35. public static void createFolder(String filePath) {
  36. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  37. ossClient.putObject(new PutObjectRequest(BUCKE_NAME_1, filePath, new ByteArrayInputStream("".getBytes())));
  38. ossClient.shutdown();
  39. }
  40. /**
  41. * 删除文件夹(OSS)
  42. *
  43. * @return
  44. */
  45. public static void deleteFolders(JSONArray jsonArray) {
  46. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  47. ArrayList<String> keysList = new ArrayList<>();
  48. for (Object obj : jsonArray) {
  49. keysList.add(obj.toString());
  50. }
  51. DeleteObjectsRequest request = new DeleteObjectsRequest(BUCKE_NAME_1);
  52. request.setKeys(keysList);
  53. // 发起deleteObjects请求。
  54. DeleteObjectsResult delObjResult = ossClient.deleteObjects(request);
  55. // 查看删除结果。
  56. for (String o : delObjResult.getDeletedObjects()) {
  57. String keyName = null;
  58. try {
  59. keyName = URLDecoder.decode(o, "UTF-8");
  60. } catch (UnsupportedEncodingException e) {
  61. e.printStackTrace();
  62. }
  63. System.out.println("delete key name: " + keyName);
  64. }
  65. ossClient.shutdown();
  66. }
  67. /**
  68. * 上传文件
  69. *
  70. * @param folderPath 上传路径 :test/
  71. * @param filename 文件名称 :1.txt
  72. * @param base64Str base64字符串
  73. * @return
  74. */
  75. public static String uploadFile(String folderPath, String filename, String base64Str) {
  76. byte[] byteStr = Base64.getDecoder().decode(base64Str);
  77. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  78. String key = folderPath + filename;
  79. ossClient.putObject(new PutObjectRequest(BUCKE_NAME_1, key, new ByteArrayInputStream(byteStr)));
  80. ossClient.shutdown();
  81. return file_url + "/" + key;
  82. }
  83. /**
  84. * 删除文件(OSS)
  85. *
  86. * @return
  87. */
  88. public static void deleteFiles(JSONArray jsonArray) {
  89. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  90. List<String> keysList = new ArrayList<>();
  91. for (Object obj : jsonArray) {
  92. keysList.add(obj.toString());
  93. }
  94. DeleteObjectsRequest request = new DeleteObjectsRequest(BUCKE_NAME_1);
  95. request.setKeys(keysList);
  96. // 发起deleteObjects请求。
  97. DeleteObjectsResult delObjResult = ossClient.deleteObjects(request);
  98. // 查看删除结果。
  99. for (String o : delObjResult.getDeletedObjects()) {
  100. String keyName = null;
  101. try {
  102. keyName = URLDecoder.decode(o, "UTF-8");
  103. } catch (UnsupportedEncodingException e) {
  104. e.printStackTrace();
  105. }
  106. System.out.println("delete key name: " + keyName);
  107. }
  108. ossClient.shutdown();
  109. }
  110. /**
  111. * 获取下级目录 filepath
  112. *
  113. * @return
  114. */
  115. public static String getFolders(String filepath) {
  116. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  117. // 构造ListObjectsRequest请求。
  118. ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1);
  119. // 设置正斜线(/)为文件夹的分隔符。
  120. listObjectsRequest.setDelimiter("/");
  121. // 列出fun目录下的所有文件和文件夹。
  122. listObjectsRequest.setPrefix(filepath);
  123. ObjectListing listing = ossClient.listObjects(listObjectsRequest);
  124. // 遍历所有commonPrefix。
  125. ArrayList<String> commonPrefixList = new ArrayList<>();
  126. for (String commonPrefix : listing.getCommonPrefixes()) {
  127. commonPrefixList.add(commonPrefix);
  128. }
  129. // 关闭OSSClient。
  130. ossClient.shutdown();
  131. JSONObject object = new JSONObject();
  132. object.put("folder", commonPrefixList);
  133. return object.toJSONString();
  134. }
  135. /**
  136. * 获取所有文件夹
  137. *
  138. * @return
  139. */
  140. public static String getAllFolders() {
  141. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  142. // 构造ListObjectsRequest请求。
  143. ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1);
  144. // 列举文件。
  145. ObjectListing listing = ossClient.listObjects(listObjectsRequest);
  146. //遍历所有文件。
  147. ArrayList<String> commonPrefixList = new ArrayList<>();
  148. for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
  149. // System.out.println(objectSummary.getKey());
  150. if (objectSummary.getKey().endsWith("/")) {
  151. String key = objectSummary.getKey();
  152. commonPrefixList.add(key);
  153. }
  154. }
  155. JSONObject object = new JSONObject();
  156. object.put("folder", commonPrefixList);
  157. // 关闭OSSClient。
  158. ossClient.shutdown();
  159. return object.toJSONString();
  160. }
  161. /**
  162. * 获取指定目录下的文件和文件夹
  163. *
  164. * @return
  165. */
  166. public static String getFilesOfPath(String folderPath) {
  167. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  168. // 构造ListObjectsRequest请求。
  169. ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1);
  170. // 设置正斜线(/)为文件夹的分隔符。
  171. listObjectsRequest.setDelimiter("/");
  172. // 列出fun目录下的所有文件和文件夹。
  173. listObjectsRequest.setPrefix(folderPath);
  174. ObjectListing listing = ossClient.listObjects(listObjectsRequest);
  175. // 遍历所有文件。
  176. List<JSONObject> objectSummaryList = new ArrayList<>();
  177. for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
  178. if (!objectSummary.getKey().equals(folderPath)) {
  179. JSONObject object = new JSONObject();
  180. object.put("key", objectSummary.getKey());
  181. object.put("name", objectSummary.getKey().replace(folderPath, ""));
  182. object.put("size", objectSummary.getSize() / 1024);
  183. object.put("time", objectSummary.getLastModified());
  184. object.put("url", file_url + "/" + objectSummary.getKey());
  185. objectSummaryList.add(object);
  186. }
  187. }
  188. // 遍历所有commonPrefix。
  189. List<JSONObject> commonPrefixList = new ArrayList<>();
  190. for (String commonPrefix : listing.getCommonPrefixes()) {
  191. JSONObject object = new JSONObject();
  192. object.put("folderpath", commonPrefix);
  193. commonPrefixList.add(object);
  194. }
  195. // 关闭OSSClient。
  196. ossClient.shutdown();
  197. JSONObject object = new JSONObject();
  198. object.put("files", objectSummaryList);
  199. object.put("folder", commonPrefixList);
  200. return object.toJSONString();
  201. }
  202. /**
  203. * 获取oss文档预览url 60分钟,需要开通【智能媒体管理 IMM】并在oss下面配置
  204. *
  205. * @return
  206. */
  207. public static String getOssPreviewUrl(String key) {
  208. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  209. // 填写请求预览的文档完整路径,完整路径中不包含Bucket名称。
  210. // 设置样式,样式中包含文档预览参数。
  211. String style = "imm/previewdoc,copy_1";
  212. // 指定生成的签名URL过期时间,最大值为15分钟。本示例指定生成的签名URL过期时间为10分钟。
  213. Date expiration = new Date(System.currentTimeMillis() + 1000 * 60 * 60);
  214. GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(BUCKE_NAME_1, key, HttpMethod.GET);
  215. req.setExpiration(expiration);
  216. req.setProcess(style);
  217. URL signedUrl = ossClient.generatePresignedUrl(req);
  218. System.out.println(signedUrl);
  219. // 关闭OSSClient。
  220. ossClient.shutdown();
  221. JSONObject object = new JSONObject();
  222. object.put("url", signedUrl.toString());
  223. return object.toJSONString();
  224. }
  225. public static void main(String[] args) {
  226. //创建文件夹
  227. AliyunOSSUtil.createFolder("test1/");
  228. AliyunOSSUtil.createFolder("test2/");
  229. //批量删除文价夹
  230. JSONArray jsonArray = new JSONArray();
  231. jsonArray.add("test1/");
  232. jsonArray.add("test2/");
  233. AliyunOSSUtil.deleteFolders(jsonArray);
  234. // //上传文件
  235. AliyunOSSUtil.uploadFile("", "1.txt", "");
  236. AliyunOSSUtil.uploadFile("test2/", "1.txt", "");
  237. //批量删除文价夹
  238. JSONArray jsonArray2 = new JSONArray();
  239. jsonArray2.add("test1/1.txt");
  240. jsonArray2.add("test2/1.txt");
  241. AliyunOSSUtil.deleteFiles(jsonArray2);
  242. //获取下级目录
  243. getFolders("");
  244. //获取所有目录
  245. getAllFolders();
  246. //获取指定目录下的文件和文件夹
  247. getFilesOfPath("资料中心/");
  248. //获取oss文档预览url 60分钟,需要开通【智能媒体管理 IMM】并在oss下面配置
  249. getOssPreviewUrl("1.tx");
  250. }
  251. }