AliyunOSSUtil.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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. File file = new File("D:\\mybatis.jpg");
  22. String filename = file.getName();
  23. String suffix = filename.substring(filename.indexOf("."));
  24. System.out.println("filename: " + filename);
  25. System.out.println("suffix: " + suffix);
  26. AliyunOSSUtil util = AliyunOSSUtil.me();
  27. util.putFile("temp15827479607","2019/12/03/"+System.currentTimeMillis() + suffix,file);
  28. byte[] content = "ceshi".getBytes();
  29. util.putObject("temp15827479607",content,"测试存储");
  30. }
  31. public AliyunOSSUtil() {
  32. }
  33. public AliyunOSSUtil(String endpoint, String accessKeyId, String accessKeySecret) {
  34. this.endpoint = endpoint;
  35. this.accessKeyId = accessKeyId;
  36. this.accessKeySecret = accessKeySecret;
  37. }
  38. public static AliyunOSSUtil me(){
  39. return new AliyunOSSUtil();
  40. }
  41. public static AliyunOSSUtil me(String endpoint,String accessKeyId, String accessKeySecret){
  42. return new AliyunOSSUtil(endpoint,accessKeyId,accessKeySecret);
  43. }
  44. /**
  45. * @param
  46. * @return
  47. * @description 创建存储空间
  48. * 存储空间是OSS全局命名空间,相当于数据的容器,可以存储若干文件。 以下代码用于新建一个存储空间
  49. * @date 2019/11/29 10:30
  50. */
  51. public void createBucket(String bucketName) {
  52. // 创建OSSClient实例。
  53. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  54. // 创建存储空间。
  55. ossClient.createBucket(bucketName);
  56. // 关闭OSSClient。
  57. ossClient.shutdown();
  58. }
  59. /**
  60. * @param
  61. * @return
  62. * @description 上传文件,上传文件至OSS
  63. * @date 2019/11/29 10:31
  64. */
  65. public boolean putObject(String bucketName,byte[] content,String objectName) {
  66. // <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
  67. // 创建OSSClient实例。
  68. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  69. try {
  70. // 上传内容到指定的存储空间(bucketName)并保存为指定的文件名称(objectName)。
  71. ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content));
  72. return true;
  73. }catch (Exception e){
  74. e.printStackTrace();
  75. return false;
  76. }finally {
  77. if(null != ossClient){
  78. // 关闭OSSClient。
  79. ossClient.shutdown();
  80. }
  81. }
  82. }
  83. /**
  84. * @param
  85. * @return
  86. * @description 下载文件,获取文件的文本内容
  87. * @date 2019/11/29 10:32
  88. */
  89. public void getObject(String bucketName,String objectName) throws Exception {
  90. // <yourObjectName>从OSS下载文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
  91. // 创建OSSClient实例。
  92. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  93. // 调用ossClient.getObject返回一个OSSObject实例,该实例包含文件内容及文件元信息。
  94. OSSObject ossObject = ossClient.getObject(bucketName, objectName);
  95. // 调用ossObject.getObjectContent获取文件输入流,可读取此输入流获取其内容。
  96. InputStream content = ossObject.getObjectContent();
  97. if (content != null) {
  98. BufferedReader reader = new BufferedReader(new InputStreamReader(content));
  99. while (true) {
  100. String line = reader.readLine();
  101. if (line == null) break;
  102. System.out.println("\n" + line);
  103. }
  104. // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
  105. content.close();
  106. }
  107. // 关闭OSSClient。
  108. ossClient.shutdown();
  109. }
  110. /**
  111. * @param
  112. * @return
  113. * @description 列举文件:列举指定存储空间下的文件。默认列举100个文件
  114. * @date 2019/11/29 10:38
  115. */
  116. public void listObjects(String bucketName) {
  117. // 创建OSSClient实例。
  118. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  119. // ossClient.listObjects返回ObjectListing实例,包含此次listObject请求的返回结果。
  120. ObjectListing objectListing = ossClient.listObjects(bucketName);
  121. // objectListing.getObjectSummaries获取所有文件的描述信息。
  122. for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
  123. System.out.println(" - " + objectSummary.getKey() + " " + "(size = " + objectSummary.getSize() + ")");
  124. }
  125. // 关闭OSSClient。
  126. ossClient.shutdown();
  127. }
  128. /**
  129. * @description 删除文件
  130. * @date 2019/11/29 10:44
  131. * @param
  132. * @return
  133. */
  134. public boolean deleteObject(String bucketName,String objectName){
  135. // <yourObjectName>表示删除OSS文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
  136. // 创建OSSClient实例。
  137. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  138. try {
  139. // 删除文件。
  140. ossClient.deleteObject(bucketName, objectName);
  141. return true;
  142. }catch (Exception e){
  143. e.printStackTrace();
  144. return false;
  145. }finally {
  146. // 关闭OSSClient。
  147. if(null != ossClient){
  148. ossClient.shutdown();
  149. }
  150. }
  151. }
  152. public void putFile(String bucketName,String objectName,File file){
  153. // 创建OSSClient实例。
  154. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  155. // 创建PutObjectRequest对象。
  156. PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, file);
  157. // 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。
  158. // ObjectMetadata metadata = new ObjectMetadata();
  159. // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
  160. // metadata.setObjectAcl(CannedAccessControlList.Private);
  161. // putObjectRequest.setMetadata(metadata);
  162. // 上传文件。
  163. ossClient.putObject(putObjectRequest);
  164. // 关闭OSSClient。
  165. ossClient.shutdown();
  166. }
  167. public String getObjectUrl(String bucketName,String objectName){
  168. String base = endpoint.replace("//","//" + bucketName + ".");
  169. String url = base + "/" + objectName;
  170. return url;
  171. }
  172. }