AliyunOSSUtil.java 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. package cn.com.ty.lift.common.utils;
  2. import cn.hutool.json.JSON;
  3. import cn.hutool.json.JSONUtil;
  4. import com.aliyun.oss.OSS;
  5. import com.aliyun.oss.OSSClientBuilder;
  6. import com.aliyun.oss.model.*;
  7. import java.io.*;
  8. /**
  9. * @author wcz
  10. * @date 2019/11/29
  11. * @description aliyun OSS工具类
  12. */
  13. public class AliyunOSSUtil {
  14. // Endpoint以杭州为例,其它Region请按实际情况填写。
  15. String endpoint = "http://oss-cn-beijing.aliyuncs.com";
  16. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  17. String accessKeyId = "LTAI4FkSqFZa6LH9HqAsVott";
  18. String accessKeySecret = "w7GXuh5tf1hduQuZ2AzT3a4q14BI1i";
  19. public static void main(String[] args) {
  20. File file = new File("D:\\mybatis.jpg");
  21. String filename = file.getName();
  22. String suffix = filename.substring(filename.indexOf("."));
  23. System.out.println("filename: " + filename);
  24. System.out.println("suffix: " + suffix);
  25. AliyunOSSUtil util = AliyunOSSUtil.me();
  26. util.putFile("temp15827479607","2019/12/03/"+System.currentTimeMillis() + suffix,file);
  27. byte[] content = "ceshi".getBytes();
  28. util.putObject("temp15827479607",content,"测试存储");
  29. }
  30. public AliyunOSSUtil() {
  31. }
  32. public AliyunOSSUtil(String endpoint, String accessKeyId, String accessKeySecret) {
  33. this.endpoint = endpoint;
  34. this.accessKeyId = accessKeyId;
  35. this.accessKeySecret = accessKeySecret;
  36. }
  37. public static AliyunOSSUtil me(){
  38. return new AliyunOSSUtil();
  39. }
  40. public static AliyunOSSUtil me(String endpoint,String accessKeyId, String accessKeySecret){
  41. return new AliyunOSSUtil(endpoint,accessKeyId,accessKeySecret);
  42. }
  43. /**
  44. * @param
  45. * @return
  46. * @description 创建存储空间
  47. * 存储空间是OSS全局命名空间,相当于数据的容器,可以存储若干文件。 以下代码用于新建一个存储空间
  48. * @date 2019/11/29 10:30
  49. */
  50. public void createBucket(String bucketName) {
  51. // 创建OSSClient实例。
  52. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  53. // 创建存储空间。
  54. ossClient.createBucket(bucketName);
  55. // 关闭OSSClient。
  56. ossClient.shutdown();
  57. }
  58. /**
  59. * @param
  60. * @return
  61. * @description 上传文件,上传文件至OSS
  62. * @date 2019/11/29 10:31
  63. */
  64. <<<<<<< Updated upstream
  65. public PutObjectResult putObject(String bucketName, byte[] content, String objectName) {
  66. =======
  67. public boolean putObject(String bucketName,byte[] content,String objectName) {
  68. >>>>>>> Stashed changes
  69. // <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
  70. // 创建OSSClient实例。
  71. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  72. <<<<<<< Updated upstream
  73. // 上传内容到指定的存储空间(bucketName)并保存为指定的文件名称(objectName)。
  74. PutObjectResult result = ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content));
  75. // 关闭OSSClient。
  76. ossClient.shutdown();
  77. return result;
  78. =======
  79. try {
  80. // 上传内容到指定的存储空间(bucketName)并保存为指定的文件名称(objectName)。
  81. ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content));
  82. return true;
  83. }catch (Exception e){
  84. e.printStackTrace();
  85. return false;
  86. }finally {
  87. if(null != ossClient){
  88. // 关闭OSSClient。
  89. ossClient.shutdown();
  90. }
  91. }
  92. >>>>>>> Stashed changes
  93. }
  94. /**
  95. * @param
  96. * @return
  97. * @description 下载文件,获取文件的文本内容
  98. * @date 2019/11/29 10:32
  99. */
  100. public void getObject(String bucketName,String objectName) throws Exception {
  101. // <yourObjectName>从OSS下载文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
  102. // 创建OSSClient实例。
  103. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  104. // 调用ossClient.getObject返回一个OSSObject实例,该实例包含文件内容及文件元信息。
  105. OSSObject ossObject = ossClient.getObject(bucketName, objectName);
  106. // 调用ossObject.getObjectContent获取文件输入流,可读取此输入流获取其内容。
  107. InputStream content = ossObject.getObjectContent();
  108. if (content != null) {
  109. BufferedReader reader = new BufferedReader(new InputStreamReader(content));
  110. while (true) {
  111. String line = reader.readLine();
  112. if (line == null) break;
  113. System.out.println("\n" + line);
  114. }
  115. // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
  116. content.close();
  117. }
  118. // 关闭OSSClient。
  119. ossClient.shutdown();
  120. }
  121. /**
  122. * @param
  123. * @return
  124. * @description 列举文件:列举指定存储空间下的文件。默认列举100个文件
  125. * @date 2019/11/29 10:38
  126. */
  127. public void listObjects(String bucketName) {
  128. // 创建OSSClient实例。
  129. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  130. // ossClient.listObjects返回ObjectListing实例,包含此次listObject请求的返回结果。
  131. ObjectListing objectListing = ossClient.listObjects(bucketName);
  132. // objectListing.getObjectSummaries获取所有文件的描述信息。
  133. for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
  134. System.out.println(" - " + objectSummary.getKey() + " " + "(size = " + objectSummary.getSize() + ")");
  135. }
  136. // 关闭OSSClient。
  137. ossClient.shutdown();
  138. }
  139. /**
  140. * @description 删除文件
  141. * @date 2019/11/29 10:44
  142. * @param
  143. * @return
  144. */
  145. public boolean deleteObject(String bucketName,String objectName){
  146. // <yourObjectName>表示删除OSS文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
  147. // 创建OSSClient实例。
  148. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  149. try {
  150. // 删除文件。
  151. ossClient.deleteObject(bucketName, objectName);
  152. return true;
  153. }catch (Exception e){
  154. e.printStackTrace();
  155. return false;
  156. }finally {
  157. // 关闭OSSClient。
  158. if(null != ossClient){
  159. ossClient.shutdown();
  160. }
  161. }
  162. }
  163. public void putFile(String bucketName,String objectName,File file){
  164. // 创建OSSClient实例。
  165. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  166. // 创建PutObjectRequest对象。
  167. PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, file);
  168. // 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。
  169. // ObjectMetadata metadata = new ObjectMetadata();
  170. // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
  171. // metadata.setObjectAcl(CannedAccessControlList.Private);
  172. // putObjectRequest.setMetadata(metadata);
  173. // 上传文件。
  174. ossClient.putObject(putObjectRequest);
  175. // 关闭OSSClient。
  176. ossClient.shutdown();
  177. }
  178. }