BucketFile.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. package com.cnd3b.utility.obs;
  2. import com.cnd3b.utility.WebRequest;
  3. import com.obs.services.internal.utils.ServiceUtils;
  4. import com.obs.services.model.HttpMethodEnum;
  5. import com.obs.services.model.ObjectMetadata;
  6. import com.obs.services.model.TemporarySignatureRequest;
  7. import com.obs.services.model.TemporarySignatureResponse;
  8. import com.obs.services.model.fs.DropFolderRequest;
  9. import java.io.InputStream;
  10. import java.nio.charset.StandardCharsets;
  11. import java.util.HashMap;
  12. import java.util.Map;
  13. public class BucketFile extends Bucket {
  14. public BucketFile(String siteid) {
  15. super(siteid);
  16. }
  17. /**
  18. * 流文件上传,如果文件类型是图片,则会自动生成缩略图
  19. */
  20. public void upload(String filename, InputStream inputStream, boolean iscreateMinImage) {
  21. obsClient.putObject(bucketname, filename, inputStream);
  22. /**
  23. * 如果是图片文件,则同时生成一个缩略图文件
  24. */
  25. if (iscreateMinImage) {
  26. String filename_short = "s_" + filename;
  27. //临时访问地址有效时间
  28. // 创建ObsClient实例
  29. TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, 3600);
  30. request.setBucketName(bucketname);
  31. request.setObjectKey(filename);
  32. // 设置图片处理参数,对图片依次进行缩放、旋转
  33. Map<String, Object> queryParams = new HashMap<String, Object>();
  34. queryParams.put("x-image-process", "image/resize,m_lfit,h_150");
  35. try {
  36. queryParams.put("x-image-save-object", ServiceUtils.toBase64(filename_short.getBytes(StandardCharsets.UTF_8)));
  37. } catch (Exception e) {
  38. e.printStackTrace();
  39. }
  40. request.setQueryParams(queryParams);
  41. // 生成临时授权URL
  42. TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
  43. //临时访问,生成缩略图(华为云在第一次访问该地址时才会生成实体文件)
  44. new WebRequest().doGet_simple(response.getSignedUrl());
  45. }
  46. }
  47. /**
  48. * 文件删除,如果存在缩略文件,则缩略文件会一起删除
  49. *
  50. * @param objectname
  51. */
  52. public void deleteFile(String objectname) {
  53. obsClient.deleteObject(bucketname, objectname);
  54. if (obsClient.doesObjectExist(bucketname, "s_" + objectname)) {
  55. obsClient.deleteObject(bucketname, "s_" + objectname);
  56. }
  57. if (obsClient.doesObjectExist(bucketname, "c_" + objectname)) {
  58. obsClient.deleteObject(bucketname, "c_" + objectname);
  59. }
  60. }
  61. public void deleteFolder(String foldername) {
  62. DropFolderRequest dropFolderRequest = new DropFolderRequest(bucketname, foldername);
  63. obsClient.dropFolder(dropFolderRequest);
  64. }
  65. public boolean doesObjectExist(String objectname) {
  66. return obsClient.doesObjectExist(bucketname, objectname);
  67. }
  68. /**
  69. * 获取文件下载地址
  70. */
  71. public String getFileUrl(String filename) {
  72. //临时访问地址有效时间
  73. //long expireSeconds = 3600L;
  74. // 创建ObsClient实例
  75. TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, 3600);
  76. request.setBucketName(bucketname);
  77. request.setObjectKey(filename);
  78. // 生成临时授权URL
  79. TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
  80. //截取永久访问url,需要桶设置公共访问策略
  81. String url = response.getSignedUrl();
  82. return url.substring(0, url.indexOf("?"));
  83. }
  84. /**
  85. * 获取文件缩略图下载地址,缩略图的名称为在源文件的前面加上"s_"
  86. */
  87. public String getMinImageUrl(String filename) {
  88. /**
  89. * 缩略图名称
  90. */
  91. String filename_short = "s_" + filename;
  92. if (!obsClient.doesObjectExist(bucketname, filename_short)) {
  93. //临时访问地址有效时间
  94. // 创建ObsClient实例
  95. TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, 3600);
  96. request.setBucketName(bucketname);
  97. request.setObjectKey(filename);
  98. // 设置图片处理参数,对图片依次进行缩放、旋转
  99. Map<String, Object> queryParams = new HashMap<String, Object>();
  100. queryParams.put("x-image-process", "image/resize,m_lfit,h_150");
  101. try {
  102. queryParams.put("x-image-save-object", ServiceUtils.toBase64(filename_short.getBytes(StandardCharsets.UTF_8)));
  103. } catch (Exception e) {
  104. e.printStackTrace();
  105. }
  106. request.setQueryParams(queryParams);
  107. // 生成临时授权URL
  108. TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
  109. //临时访问,生成缩略图(华为云在第一次访问该地址时才会生成实体文件)
  110. new WebRequest().doGet_simple(response.getSignedUrl());
  111. }
  112. return getFileUrl(filename_short);
  113. }
  114. /**
  115. * 获取文件缩略图下载地址,缩略图的名称为在源文件的前面加上"c_"
  116. */
  117. public String getCompressImageUrl(String filename) {
  118. /**
  119. * 缩略图名称
  120. */
  121. String filename_short = "c_" + filename;
  122. if (!obsClient.doesObjectExist(bucketname, filename_short)) {
  123. //临时访问地址有效时间
  124. // 创建ObsClient实例
  125. TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, 3600);
  126. request.setBucketName(bucketname);
  127. request.setObjectKey(filename);
  128. // 设置图片处理参数,对图片依次进行缩放、旋转
  129. Map<String, Object> queryParams = new HashMap<String, Object>();
  130. queryParams.put("x-image-process", "image/resize,p_60");//长宽均压缩60%
  131. try {
  132. queryParams.put("x-image-save-object", ServiceUtils.toBase64(filename_short.getBytes(StandardCharsets.UTF_8)));
  133. } catch (Exception e) {
  134. e.printStackTrace();
  135. }
  136. request.setQueryParams(queryParams);
  137. // 生成临时授权URL
  138. TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
  139. //临时访问,生成缩略图(华为云在第一次访问该地址时才会生成实体文件)
  140. new WebRequest().doGet_simple(response.getSignedUrl());
  141. }
  142. return getFileUrl(filename_short);
  143. }
  144. public static void main(String agrs[]) {
  145. BucketFile bucketFile = new BucketFile("zjdm");
  146. System.err.println(bucketFile.getMinImageUrl("202105181621308129037B51e055c6.jpg"));
  147. }
  148. public ObjectMetadata getObjectMetadata(String objectname) {
  149. return obsClient.getObjectMetadata(bucketname, objectname);
  150. }
  151. /**
  152. * 关闭
  153. */
  154. public void close() {
  155. if (obsClient != null) {
  156. try {
  157. obsClient.close();
  158. } catch (Exception e) {
  159. e.printStackTrace();
  160. }
  161. }
  162. }
  163. public String getUploadUrl(String filetype, String objectname, HttpMethodEnum type) throws Exception {
  164. long expireSeconds = 3600L;
  165. Map<String, String> headers = new HashMap<String, String>();
  166. String contentType = "application/octet-stream";
  167. if (type.equals(HttpMethodEnum.POST)) {
  168. contentType = "multipart/form-data";
  169. }
  170. if ("pdf".equalsIgnoreCase(filetype)) {
  171. contentType = "application/pdf";
  172. }
  173. headers.put("Content-Type", contentType);
  174. TemporarySignatureRequest request = new TemporarySignatureRequest(type, expireSeconds);
  175. request.setBucketName(bucketname);
  176. request.setObjectKey(objectname);
  177. request.setHeaders(headers);
  178. TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
  179. return response.getSignedUrl();
  180. }
  181. }