HuaweiObsUtil.java 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package com.om.utils;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.obs.services.ObsClient;
  4. import com.obs.services.model.HeaderResponse;
  5. import com.obs.services.model.HttpMethodEnum;
  6. import com.obs.services.model.TemporarySignatureRequest;
  7. import com.obs.services.model.TemporarySignatureResponse;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.springframework.beans.factory.annotation.Value;
  10. import org.springframework.stereotype.Component;
  11. import org.springframework.web.multipart.MultipartFile;
  12. import java.io.IOException;
  13. import java.io.InputStream;
  14. import java.util.HashMap;
  15. import java.util.Map;
  16. @Slf4j
  17. @Component
  18. public class HuaweiObsUtil {
  19. //Access Key Id
  20. @Value("${obs.ak}")
  21. private String ak;
  22. //Secret Access Key
  23. @Value("${obs.sk}")
  24. private String sk;
  25. //桶名称
  26. @Value("${obs.bucketName}")
  27. private String bucketName;
  28. // 终端节点访问Endpoint
  29. @Value("${obs.endpoint}")
  30. private String endpoint;
  31. // 访问域名 在域名后面或文件目录前加“/”
  32. @Value("${obs.path}")
  33. private String path;
  34. /**
  35. * 文件上传
  36. *
  37. * @param file 要上传的文件
  38. * @return 文件在OBS中的URL
  39. * @throws IOException IO异常
  40. */
  41. public String upload(MultipartFile file,String prefix) throws IOException {
  42. ObsClient obsClient = null;
  43. try {
  44. String originalFilename = file.getOriginalFilename();
  45. // 拼接文件在OBS中的路径
  46. String objectName = prefix + "/"+ originalFilename;
  47. // 初始化OBS客户端
  48. obsClient = new ObsClient(ak, sk, endpoint);
  49. // 上传文件到OBS
  50. HeaderResponse response = obsClient.putObject(bucketName, objectName, file.getInputStream());
  51. log.info(JSONObject.toJSONString(response));
  52. // 判断上传是否成功
  53. int statusCode = response.getStatusCode();
  54. if (200 == statusCode) {
  55. // 拼接文件在OBS中的URL并返回
  56. String objectUrl = "https://"+path + "/" + objectName;
  57. return objectUrl;
  58. }
  59. } finally {
  60. // 关闭OBS客户端
  61. obsClient.close();
  62. }
  63. return null;
  64. }
  65. /**
  66. * 下载文件
  67. *
  68. * @param fileName 文件名称
  69. * @param fileType 文件路径
  70. * @return
  71. */
  72. public String getDownloadUrl(String fileName, FileType fileType) {
  73. ObsClient obsClient = null;
  74. obsClient = new ObsClient(ak, sk, endpoint);
  75. // URL有效期,3600秒.5分钟
  76. long expireSeconds = 3600L;
  77. String objectName = fileType.getType().concat("/").concat(fileName);
  78. TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expireSeconds);
  79. request.setBucketName(bucketName);
  80. request.setObjectKey(objectName);
  81. TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
  82. return response.getSignedUrl();
  83. }
  84. /**
  85. * 下载文件
  86. *
  87. * @param fileName 文件名称
  88. * @param prefix 文件路径
  89. * @return
  90. */
  91. public String getDownloadUrl(String fileName, String prefix) {
  92. ObsClient obsClient = null;
  93. obsClient = new ObsClient(ak, sk, endpoint);
  94. // URL有效期,3600秒.5分钟
  95. long expireSeconds = 3600L;
  96. String objectName = prefix.concat("/").concat(fileName);
  97. TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expireSeconds);
  98. request.setBucketName(bucketName);
  99. request.setObjectKey(objectName);
  100. TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
  101. return response.getSignedUrl();
  102. }
  103. /**
  104. * 获取上传地址
  105. *
  106. * @param fileName 文件名称
  107. * @param fileType 文件路径
  108. * @return
  109. */
  110. public String getUploadUrl(String fileName, FileType fileType) {
  111. try {
  112. // 创建ObsClient实例
  113. ObsClient obsClient = new ObsClient(ak, sk, endpoint);
  114. // URL有效期,3600秒
  115. long expireSeconds = 3600L;
  116. String objectName = fileType.getType().concat("/").concat(fileName);
  117. TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expireSeconds);
  118. request.setBucketName(bucketName);
  119. request.setObjectKey(objectName);
  120. TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
  121. return response.getSignedUrl();
  122. } catch (Exception e) {
  123. log.error("获取上传地址异常:{}", e.getMessage(), e);
  124. }
  125. return null;
  126. }
  127. /**
  128. * 获取上传地址
  129. *
  130. * @param fileName 文件名称
  131. * @param prefix 文件路径
  132. * @return
  133. */
  134. public String getUploadUrl(String fileName, String prefix) {
  135. try {
  136. // 创建ObsClient实例
  137. ObsClient obsClient = new ObsClient(ak, sk, endpoint);
  138. // URL有效期,3600秒
  139. long expireSeconds = 3600L;
  140. String objectName = prefix.concat("/").concat(fileName);
  141. TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expireSeconds);
  142. request.setBucketName(bucketName);
  143. request.setObjectKey(objectName);
  144. TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
  145. return response.getSignedUrl();
  146. } catch (Exception e) {
  147. log.error("获取上传地址异常:{}", e.getMessage(), e);
  148. }
  149. return null;
  150. }
  151. /**
  152. * 上传视频
  153. *
  154. * @param fileName 文件名称
  155. * @param fileType 文件路径
  156. * @return
  157. */
  158. public boolean uploadFileVideo(String fileName, FileType fileType, InputStream is) {
  159. try {
  160. String objectName = fileType.getType().concat("/").concat(fileName);
  161. ObsClient obsClient = new ObsClient(ak, sk, endpoint);
  162. // 添加 ContentType (添加后可在浏览器中直接浏览,而非下载链接)
  163. obsClient.putObject(bucketName, objectName, is);
  164. obsClient.close();
  165. return true;
  166. } catch (Exception e) {
  167. log.error("上传视频文件异常:{}", e.getMessage(), e);
  168. }
  169. return false;
  170. }
  171. public enum FileType {
  172. TEST("test", "测试");
  173. private String type;
  174. private String desc;
  175. FileType(String type, String desc) {
  176. this.type = type;
  177. this.desc = desc;
  178. }
  179. public String getType() {
  180. return type;
  181. }
  182. public String getDesc() {
  183. return desc;
  184. }
  185. }
  186. }