HuaweiObsUtil.java 8.0 KB

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