AliyunOSSUtil.java 6.9 KB

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