AliyunOSSUtil.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454
  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.aliyuncs.DefaultAcsClient;
  9. import com.aliyuncs.IAcsClient;
  10. import com.aliyuncs.exceptions.ClientException;
  11. import com.aliyuncs.exceptions.ServerException;
  12. import com.aliyuncs.mts.model.v20140618.SubmitJobsRequest;
  13. import com.aliyuncs.mts.model.v20140618.SubmitJobsResponse;
  14. import com.aliyuncs.mts.model.v20140618.SubmitMediaInfoJobRequest;
  15. import com.aliyuncs.mts.model.v20140618.SubmitMediaInfoJobResponse;
  16. import com.aliyuncs.profile.DefaultProfile;
  17. import com.cnd3b.common.parameter.parameter;
  18. import org.apache.commons.lang.exception.ExceptionUtils;
  19. import java.io.ByteArrayInputStream;
  20. import java.io.UnsupportedEncodingException;
  21. import java.net.URL;
  22. import java.net.URLDecoder;
  23. import java.net.URLEncoder;
  24. import java.sql.Date;
  25. import java.util.ArrayList;
  26. import java.util.Base64;
  27. import java.util.List;
  28. public class AliyunOSSUtil {
  29. //仓库名称-培训学习
  30. // public static final String BUCKE_NAME_1 = "jssx";
  31. //仓库名称-培训学习测试用
  32. public static final String BUCKE_NAME_1 = parameter.oss_bucke_name();
  33. //地域节点
  34. public static final String END_POINT = "oss-cn-hangzhou.aliyuncs.com";
  35. //AccessKey ID 阿里云AccessKey
  36. public static final String AccessKey_ID = "LTAI5t5mBLk8DbrVNZuQFPCP";
  37. //Access Key Secret 阿里云Secret
  38. public static final String AccessKey_Secret = "KWZjSffg8LuVMXWYP7LMeV4qCGm9x0";
  39. //外网访问
  40. public static final String file_url = BUCKE_NAME_1 + "." + END_POINT;
  41. /**
  42. * 创建文件夹,路径以反斜杠结尾:test/
  43. *
  44. * @return
  45. */
  46. public static void createFolder(String filePath) {
  47. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  48. ossClient.putObject(new PutObjectRequest(BUCKE_NAME_1, filePath, new ByteArrayInputStream("".getBytes())));
  49. ossClient.shutdown();
  50. }
  51. /**
  52. * 删除文件夹(OSS)
  53. *
  54. * @return
  55. */
  56. public static void deleteFolders(JSONArray jsonArray) {
  57. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  58. ArrayList<String> keysList = new ArrayList<>();
  59. for (Object obj : jsonArray) {
  60. keysList.add(obj.toString());
  61. }
  62. DeleteObjectsRequest request = new DeleteObjectsRequest(BUCKE_NAME_1);
  63. request.setKeys(keysList);
  64. // 发起deleteObjects请求。
  65. DeleteObjectsResult delObjResult = ossClient.deleteObjects(request);
  66. // 查看删除结果。
  67. for (String o : delObjResult.getDeletedObjects()) {
  68. String keyName = null;
  69. try {
  70. keyName = URLDecoder.decode(o, "UTF-8");
  71. } catch (UnsupportedEncodingException e) {
  72. e.printStackTrace();
  73. }
  74. System.out.println("delete key name: " + keyName);
  75. }
  76. ossClient.shutdown();
  77. }
  78. /**
  79. * 上传文件
  80. *
  81. * @param folderPath 上传路径 :test/
  82. * @param filename 文件名称 :1.txt
  83. * @param base64Str base64字符串
  84. * @return
  85. */
  86. public static String uploadFile(String folderPath, String filename, String base64Str) {
  87. byte[] byteStr = Base64.getDecoder().decode(base64Str);
  88. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  89. String key = folderPath + filename;
  90. ossClient.putObject(new PutObjectRequest(BUCKE_NAME_1, key, new ByteArrayInputStream(byteStr)));
  91. ossClient.shutdown();
  92. return file_url + "/" + key;
  93. }
  94. /**
  95. * 删除文件(OSS)
  96. *
  97. * @return
  98. */
  99. public static void deleteFiles(JSONArray jsonArray) {
  100. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  101. List<String> keysList = new ArrayList<>();
  102. for (Object obj : jsonArray) {
  103. keysList.add(obj.toString());
  104. }
  105. DeleteObjectsRequest request = new DeleteObjectsRequest(BUCKE_NAME_1);
  106. request.setKeys(keysList);
  107. // 发起deleteObjects请求。
  108. DeleteObjectsResult delObjResult = ossClient.deleteObjects(request);
  109. // 查看删除结果。
  110. for (String o : delObjResult.getDeletedObjects()) {
  111. String keyName = null;
  112. try {
  113. keyName = URLDecoder.decode(o, "UTF-8");
  114. } catch (UnsupportedEncodingException e) {
  115. e.printStackTrace();
  116. }
  117. System.out.println("delete key name: " + keyName);
  118. }
  119. ossClient.shutdown();
  120. }
  121. /**
  122. * 获取下级目录 filepath
  123. *
  124. * @return
  125. */
  126. public static String getFolders(String filepath) {
  127. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  128. // 构造ListObjectsRequest请求。
  129. ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1);
  130. // 设置正斜线(/)为文件夹的分隔符。
  131. listObjectsRequest.setDelimiter("/");
  132. // 列出fun目录下的所有文件和文件夹。
  133. listObjectsRequest.setPrefix(filepath);
  134. ObjectListing listing = ossClient.listObjects(listObjectsRequest);
  135. // 遍历所有commonPrefix。
  136. ArrayList<String> commonPrefixList = new ArrayList<>();
  137. for (String commonPrefix : listing.getCommonPrefixes()) {
  138. commonPrefixList.add(commonPrefix);
  139. }
  140. // 关闭OSSClient。
  141. ossClient.shutdown();
  142. JSONObject object = new JSONObject();
  143. object.put("folder", commonPrefixList);
  144. return object.toJSONString();
  145. }
  146. // /**
  147. // * 获取所有文件夹
  148. // *
  149. // * @return
  150. // */
  151. // public static String getAllFolders() {
  152. // OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  153. // // 构造ListObjectsRequest请求。
  154. // ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1);
  155. // // 列举文件。
  156. // ObjectListing listing = ossClient.listObjects(listObjectsRequest);
  157. // //遍历所有文件。
  158. // ArrayList<String> commonPrefixList = new ArrayList<>();
  159. // for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
  160. //// System.out.println(objectSummary.getKey());
  161. // if (objectSummary.getKey().endsWith("/")) {
  162. // String key = objectSummary.getKey();
  163. // commonPrefixList.add(key);
  164. //
  165. //
  166. // }
  167. //
  168. // }
  169. // JSONObject object = new JSONObject();
  170. // object.put("folder", commonPrefixList);
  171. //
  172. // // 关闭OSSClient。
  173. // ossClient.shutdown();
  174. //
  175. // return object.toJSONString();
  176. // }
  177. /**
  178. * 获取指定目录下的文件和文件夹
  179. *
  180. * @return
  181. */
  182. public static String getFilesOfPath(String folderPath) {
  183. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  184. // 构造ListObjectsRequest请求。
  185. ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1);
  186. // 设置正斜线(/)为文件夹的分隔符。
  187. listObjectsRequest.setDelimiter("/");
  188. // 列出fun目录下的所有文件和文件夹。
  189. listObjectsRequest.setPrefix(folderPath);
  190. ObjectListing listing = ossClient.listObjects(listObjectsRequest);
  191. // 遍历所有文件。
  192. List<JSONObject> objectSummaryList = new ArrayList<>();
  193. for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
  194. if (!objectSummary.getKey().equals(folderPath)) {
  195. JSONObject object = new JSONObject();
  196. object.put("key", objectSummary.getKey());
  197. object.put("name", objectSummary.getKey().replace(folderPath, ""));
  198. object.put("size", objectSummary.getSize() / 1024);
  199. object.put("time", objectSummary.getLastModified());
  200. object.put("url", file_url + "/" + objectSummary.getKey());
  201. objectSummaryList.add(object);
  202. }
  203. }
  204. // 遍历所有commonPrefix。
  205. List<JSONObject> commonPrefixList = new ArrayList<>();
  206. for (String commonPrefix : listing.getCommonPrefixes()) {
  207. JSONObject object = new JSONObject();
  208. object.put("folderpath", commonPrefix);
  209. commonPrefixList.add(object);
  210. }
  211. // 关闭OSSClient。
  212. ossClient.shutdown();
  213. JSONObject object = new JSONObject();
  214. object.put("files", objectSummaryList);
  215. object.put("folder", commonPrefixList);
  216. return object.toJSONString();
  217. }
  218. /**
  219. * 获取oss文档预览url 60分钟,需要开通【智能媒体管理 IMM】并在oss下面配置
  220. *
  221. * @return
  222. */
  223. public static String getOssPreviewUrl(String key) {
  224. OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  225. // 填写请求预览的文档完整路径,完整路径中不包含Bucket名称。
  226. // 设置样式,样式中包含文档预览参数。
  227. String style = "imm/previewdoc,copy_1";
  228. // 指定生成的签名URL过期时间,最大值为15分钟。本示例指定生成的签名URL过期时间为10分钟。
  229. Date expiration = new Date(System.currentTimeMillis() + 1000 * 60 * 60);
  230. GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(BUCKE_NAME_1, key, HttpMethod.GET);
  231. req.setExpiration(expiration);
  232. req.setProcess(style);
  233. URL signedUrl = ossClient.generatePresignedUrl(req);
  234. System.out.println(signedUrl);
  235. // 关闭OSSClient。
  236. ossClient.shutdown();
  237. JSONObject object = new JSONObject();
  238. object.put("url", signedUrl.toString());
  239. return object.toJSONString();
  240. }
  241. // public static void main(String[] args) {
  242. //
  243. // //创建文件夹
  244. // AliyunOSSUtil.createFolder("test1/");
  245. // AliyunOSSUtil.createFolder("test2/");
  246. // //批量删除文价夹
  247. // JSONArray jsonArray = new JSONArray();
  248. // jsonArray.add("test1/");
  249. // jsonArray.add("test2/");
  250. // AliyunOSSUtil.deleteFolders(jsonArray);
  251. //// //上传文件
  252. // AliyunOSSUtil.uploadFile("", "1.txt", "");
  253. // AliyunOSSUtil.uploadFile("test2/", "1.txt", "");
  254. // //批量删除文价夹
  255. // JSONArray jsonArray2 = new JSONArray();
  256. // jsonArray2.add("test1/1.txt");
  257. // jsonArray2.add("test2/1.txt");
  258. // AliyunOSSUtil.deleteFiles(jsonArray2);
  259. //
  260. // //获取下级目录
  261. // getFolders("");
  262. // //获取所有目录
  263. // getAllFolders();
  264. // //获取指定目录下的文件和文件夹
  265. // getFilesOfPath("资料中心/");
  266. // //获取oss文档预览url 60分钟,需要开通【智能媒体管理 IMM】并在oss下面配置
  267. // getOssPreviewUrl("1.tx");
  268. //
  269. // }
  270. private static final String ossBucket = BUCKE_NAME_1;
  271. private static final String ossLocation = "oss-cn-hangzhou";
  272. private static final String REGION = "cn-hangzhou";
  273. private static final String mpsRegionId = "cn-hangzhou";
  274. private static final String mtsEndpoint = "mts." + mpsRegionId + ".aliyuncs.com";
  275. private static DefaultAcsClient aliyunClient;
  276. private static final String pipelineId = "3852035b69474d508167f2af72d9dce4";
  277. private static final String accessKeyId = AccessKey_ID;
  278. private static final String accessKeySecret = AccessKey_Secret;
  279. /**
  280. * 调用本接口之后媒体处理服务会对输入文件进行媒体信息分析,返回输入文件的媒体信息。您可以通过查询媒体信息作业接口得到媒体信息分析结果。
  281. *
  282. * @param Object
  283. * @return
  284. */
  285. public static String submitMediaInfoJob(String Object) {
  286. JSONObject jsonObject = new JSONObject();
  287. jsonObject.put("Bucket", ossBucket);
  288. jsonObject.put("Location", ossLocation);
  289. jsonObject.put("Object", Object);
  290. String json = jsonObject.toJSONString();
  291. try {
  292. DefaultProfile.addEndpoint(REGION, REGION, "Mts", mtsEndpoint);
  293. } catch (ClientException e) {
  294. System.out.print(ExceptionUtils.getStackTrace(e));
  295. System.exit(1);
  296. }
  297. aliyunClient = new DefaultAcsClient(DefaultProfile.getProfile(REGION, accessKeyId, accessKeySecret));
  298. SubmitMediaInfoJobRequest request = new SubmitMediaInfoJobRequest();
  299. request.setInput(json);
  300. request.setPipelineId(pipelineId);
  301. try {
  302. SubmitMediaInfoJobResponse response = aliyunClient.getAcsResponse(request);
  303. return JSONObject.toJSONString(response);
  304. } catch (ClientException e) {
  305. e.printStackTrace();
  306. }
  307. return "";
  308. }
  309. public static void transcoding(String TemplateId, String ossInputObject, String ossOutputObject) {
  310. // 创建DefaultAcsClient实例并初始化
  311. DefaultProfile profile = DefaultProfile.getProfile(
  312. mpsRegionId, // 地域ID
  313. accessKeyId, // RAM账号的AccessKey ID
  314. accessKeySecret); // RAM账号Access Key Secret
  315. IAcsClient client = new DefaultAcsClient(profile);
  316. // 创建API请求并设置参数
  317. SubmitJobsRequest request = new SubmitJobsRequest();
  318. // Input
  319. JSONObject input = new JSONObject();
  320. input.put("Location", ossLocation);
  321. input.put("Bucket", ossBucket);
  322. try {
  323. input.put("Object", URLEncoder.encode(ossInputObject, "utf-8"));
  324. } catch (UnsupportedEncodingException e) {
  325. throw new RuntimeException("input URL encode failed");
  326. }
  327. request.setInput(input.toJSONString());
  328. // Output
  329. String outputOSSObject;
  330. try {
  331. outputOSSObject = URLEncoder.encode(ossOutputObject, "utf-8");
  332. } catch (UnsupportedEncodingException e) {
  333. throw new RuntimeException("output URL encode failed");
  334. }
  335. JSONObject output = new JSONObject();
  336. output.put("OutputObject", outputOSSObject);
  337. // Ouput->Container
  338. // JSONObject container = new JSONObject();
  339. // container.put("Format", "mp4");
  340. // output.put("Container", container.toJSONString());
  341. // Ouput->Video
  342. // JSONObject video = new JSONObject();
  343. // video.put("Codec", "H.264");
  344. // video.put("Bitrate", "1500");
  345. // video.put("Width", "1280");
  346. // video.put("Fps", "25");
  347. // output.put("Video", video.toJSONString());
  348. // Ouput->Audio
  349. // JSONObject audio = new JSONObject();
  350. // audio.put("Codec", "AAC");
  351. // audio.put("Bitrate", "128");
  352. // audio.put("Channels", "2");
  353. // audio.put("Samplerate", "44100");
  354. // output.put("Audio", audio.toJSONString());
  355. // Ouput->TemplateId
  356. output.put("TemplateId", TemplateId);
  357. JSONArray outputs = new JSONArray();
  358. outputs.add(output);
  359. request.setOutputs(outputs.toJSONString());
  360. request.setOutputBucket(ossBucket);
  361. request.setOutputLocation(ossLocation);
  362. // PipelineId
  363. request.setPipelineId(pipelineId);
  364. // 发起请求并处理应答或异常
  365. SubmitJobsResponse response;
  366. try {
  367. response = client.getAcsResponse(request);
  368. System.out.println("RequestId is:" + response.getRequestId());
  369. if (response.getJobResultList().get(0).getSuccess()) {
  370. System.out.println("JobId is:" + response.getJobResultList().get(0).getJob().getJobId());
  371. } else {
  372. System.out.println("SubmitJobs Failed code:" + response.getJobResultList().get(0).getCode() +
  373. " message:" + response.getJobResultList().get(0).getMessage());
  374. }
  375. } catch (ServerException e) {
  376. e.printStackTrace();
  377. } catch (ClientException e) {
  378. e.printStackTrace();
  379. }
  380. }
  381. public static List<String> getOssFileList(String folderPath) {
  382. OSS client = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret);
  383. // 构造ListObjectsRequest请求。
  384. ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1);
  385. // 设置prefix参数来获取fun目录下的所有文件。
  386. listObjectsRequest.setPrefix(folderPath);
  387. // 递归列举目录下的所有文件。
  388. ObjectListing listing = client.listObjects(listObjectsRequest);
  389. // 遍历所有文件。
  390. List<String> keysList = new ArrayList<>();
  391. for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
  392. if (!objectSummary.getKey().endsWith("/")) {
  393. String key = objectSummary.getKey();
  394. // System.err.println(key);
  395. keysList.add(key);
  396. }
  397. }
  398. client.shutdown();
  399. return keysList;
  400. }
  401. }