OssArchiveUtil.java 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package com.caimei.modules.archive.utils;
  2. import com.aliyun.oss.OSS;
  3. import com.aliyun.oss.OSSClientBuilder;
  4. import com.aliyun.oss.model.GetObjectRequest;
  5. import com.aliyun.oss.model.ObjectMetadata;
  6. import com.aliyun.oss.model.UploadFileRequest;
  7. import com.thinkgem.jeesite.common.config.Global;
  8. import org.springframework.web.multipart.MultipartFile;
  9. import java.io.File;
  10. import java.io.IOException;
  11. import java.util.Date;
  12. import java.util.UUID;
  13. public class OssArchiveUtil {
  14. private static String endpoint = Global.getConfig("aliyun.endpoint");
  15. private static String accessKeyId = Global.getConfig("aliyun.accessKeyId");
  16. private static String accessKeySecret = Global.getConfig("aliyun.accessKeySecret");
  17. private static String privateBucket = Global.getConfig("aliyun.bucketName");
  18. private static String config = Global.getConfig("cm.config");
  19. public static String ossUpload(String fileName, String path, File file, String contentType) {
  20. String url = null;
  21. try {
  22. if ("product".equals(config)) {
  23. fileName = "prod/" + path + fileName;
  24. } else {
  25. fileName = config + "/" + path + fileName;
  26. }
  27. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  28. ObjectMetadata meta = new ObjectMetadata();
  29. meta.setContentType(contentType);
  30. UploadFileRequest uploadFileRequest = new UploadFileRequest(privateBucket, fileName);
  31. // 指定上传的本地文件。
  32. uploadFileRequest.setUploadFile(file.toString());
  33. // 指定上传并发线程数,默认为1。
  34. uploadFileRequest.setTaskNum(10);
  35. // 指定上传的分片大小,范围为100KB~5GB,默认为文件大小/10000。
  36. uploadFileRequest.setPartSize(1024 * 1024);
  37. // 开启断点续传,默认关闭。
  38. uploadFileRequest.setEnableCheckpoint(true);
  39. uploadFileRequest.setCheckpointFile(file.getAbsolutePath() + "uploadFile.ucp");
  40. // 文件的元数据。
  41. uploadFileRequest.setObjectMetadata(meta);
  42. // 设置上传成功回调,参数为Callback类型。
  43. //uploadFileRequest.setCallback("<yourCallbackEvent>");
  44. // 断点续传上传。
  45. ossClient.uploadFile(uploadFileRequest);
  46. // 有效期100年
  47. Date expiration = new Date(System.currentTimeMillis() + 60L * 60 * 24 * 365 * 100 * 1000);
  48. url = ossClient.generatePresignedUrl(privateBucket, fileName, expiration).toString();
  49. // 关闭OSSClient。
  50. ossClient.shutdown();
  51. } catch (Throwable e) {
  52. e.printStackTrace();
  53. }
  54. return url;
  55. }
  56. /**
  57. * 通过文件名判断并获取OSS服务文件上传时文件的contentType
  58. */
  59. public static String getContentType(String fileName) {
  60. String fileExtension = fileName.substring(fileName.lastIndexOf("."));
  61. if (".bmp".equalsIgnoreCase(fileExtension)) {
  62. return "image/bmp";
  63. }
  64. if (".gif".equalsIgnoreCase(fileExtension)) {
  65. return "image/gif";
  66. }
  67. if (".jpeg".equalsIgnoreCase(fileExtension)) {
  68. return "image/jpeg";
  69. }
  70. if (".jpg".equalsIgnoreCase(fileExtension)) {
  71. return "image/jpg";
  72. }
  73. if (".png".equalsIgnoreCase(fileExtension)) {
  74. return "image/png";
  75. }
  76. if (".html".equalsIgnoreCase(fileExtension)) {
  77. return "text/html";
  78. }
  79. if (".txt".equalsIgnoreCase(fileExtension)) {
  80. return "text/plain";
  81. }
  82. if (".vsd".equalsIgnoreCase(fileExtension)) {
  83. return "application/vnd.visio";
  84. }
  85. if (".ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension)) {
  86. return "application/vnd.ms-powerpoint";
  87. }
  88. if (".doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension)) {
  89. return "application/msword";
  90. }
  91. if (".xml".equalsIgnoreCase(fileExtension)) {
  92. return "text/xml";
  93. }
  94. if (".mp4".equalsIgnoreCase(fileExtension)) {
  95. return "video/mp4";
  96. }
  97. if (".mp3".equalsIgnoreCase(fileExtension)) {
  98. return "audio/mp3";
  99. }
  100. if (".pdf".equalsIgnoreCase(fileExtension)) {
  101. return "application/pdf";
  102. }
  103. return "text/html";
  104. }
  105. public static void deleteFile(File... files) {
  106. for (File file : files) {
  107. //logger.info("File:[{}]",file.getAbsolutePath());
  108. if (file.exists()) {
  109. file.delete();
  110. }
  111. }
  112. }
  113. public static File ossUpload(MultipartFile file) throws IOException {
  114. // 获取文件名
  115. String fileName = file.getOriginalFilename();
  116. // 获取文件后缀
  117. String prefix = fileName.substring(fileName.lastIndexOf("."));
  118. // 用uuid作为文件名,防止生成的临时文件重复
  119. File excelFile = File.createTempFile(UUID.randomUUID().toString(), prefix);
  120. // MultipartFile to File
  121. file.transferTo(excelFile);
  122. //程序结束时,删除临时文件
  123. return excelFile;
  124. }
  125. /**
  126. * 授权生成签名URL临时访问
  127. *
  128. * @param fileName 文件名称
  129. */
  130. public static String getOssUrl(String path, String fileName) {
  131. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  132. // 设置URL过期时间为1个小时
  133. Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000);
  134. if ("product".equals(config)) {
  135. fileName = "prod/" + path + fileName;
  136. } else {
  137. fileName = config + "/" + path + fileName;
  138. }
  139. String url = ossClient.generatePresignedUrl(privateBucket, fileName, expiration).toString();
  140. // 关闭OSSClient。
  141. ossClient.shutdown();
  142. return url;
  143. }
  144. /**
  145. * oss单个文件删除
  146. *
  147. * @param fileName 文件名称或文件夹名称
  148. */
  149. public static void deleteSingleFile(String path, String fileName) {
  150. // 创建OSSClient实例。
  151. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  152. // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。
  153. // 如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
  154. if ("product".equals(config)) {
  155. fileName = "prod/" + path + fileName;
  156. } else {
  157. fileName = config + "/" + path + fileName;
  158. }
  159. ossClient.deleteObject(privateBucket, fileName);
  160. // 关闭OSSClient。
  161. ossClient.shutdown();
  162. }
  163. /**
  164. * oss单个文件下载
  165. */
  166. public static void downFile(String path, String ossName, String fileName) {
  167. // 创建OSSClient实例。
  168. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  169. // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
  170. if ("product".equals(config)) {
  171. ossName = "prod/" + path + ossName;
  172. } else {
  173. ossName = config + "/" + path + ossName;
  174. }
  175. ossClient.getObject(new GetObjectRequest(privateBucket, ossName), new File("./" + fileName));
  176. // 关闭OSSClient。
  177. ossClient.shutdown();
  178. }
  179. }