需要導入的dependency
後兩個依賴主要是用于實作Bucket的建立以及檔案的上傳
1 <dependency>
2 <groupId>com.aliyun.oss</groupId>
3 <artifactId>aliyun-sdk-oss</artifactId>
4 <version>3.10.2</version>
5 </dependency>
6 <dependency>
7 <groupId>commons-io</groupId>
8 <artifactId>commons-io</artifactId>
9 <version>1.3.2</version>
10 </dependency>
11 <dependency>
12 <groupId>commons-fileupload</groupId>
13 <artifactId>commons-fileupload</artifactId>
14 <version>1.2.1</version>
15 </dependency>
加載完相關依賴後,便可以通過建立OSSClient對象調用相關接口實作相關功能啦.
注意:在沒有綁定私有域名的情況下,檔案上傳成功後傳回的url隻能是下載下傳連結...
代碼如下: 1 package com.aliyun.oss;
2
3 import com.aliyun.oss.model.CannedAccessControlList;
4 import com.aliyun.oss.model.CreateBucketRequest;
5 import com.aliyun.oss.model.MultipartUpload;
6 import org.springframework.util.StreamUtils;
7 import org.springframework.util.StringUtils;
8 import org.springframework.web.multipart.MultipartFile;
9
10 import java.io.ByteArrayInputStream;
11 import java.io.IOException;
12 import java.text.SimpleDateFormat;
13 import java.util.Date;
14 import java.util.UUID;
15
16 public class OssUtil {
17 //定義外網通路的參數 --地域節點
18 private static String EndPoint = "oss-cn-zhangjiakou.aliyuncs.com";
19 private static String AccessKeyID = "XXXXXXX";
20 private static String AccessKeySecret = "XXXXXXX";
21 private static String BucketName = "tiandankanfeng"; //倉庫名稱
22 private static String SufferUrl = "http://tiandankanfeng.oss-cn-zhangjiakou.aliyuncs.com/"; //檔案上傳成功後傳回的路徑,類似二級域名
23 private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); //格式化時間
24
25 public OSSClient getOSSClient(){
26 //建立一個OSSClient對象
27 OSSClient ossClient = new OSSClient(EndPoint,AccessKeyID,AccessKeySecret);
28 if(ossClient.doesBucketExist(BucketName)) {
29 System.out.println("success");
30 //關閉oss的連接配接 此處不要關閉,後面會調用,不然會報錯
31 }else { //通過api接口來建立bucket
32 System.out.println("fail to find ,so to get a new one");
33 //建立一個oss倉庫
34 CreateBucketRequest bucketRequest = new CreateBucketRequest(null);
35 bucketRequest.setBucketName(BucketName);
36 bucketRequest.setCannedACL(CannedAccessControlList.PublicRead); //設定通路權限 --公共讀
37 ossClient.createBucket(bucketRequest); //映射原理,會重新生成一個ossClient并覆寫目前的ossClient
38
39 }
40 return ossClient;
41 }
42
43 /**
44 * 上傳檔案
45 * @param multipartFile 需要上傳的檔案
46 * @param fileType 檔案類型
47 * @return
48 */
49 public String uploadDocuments(MultipartFile multipartFile, String fileType) throws IOException {
50 //擷取oss連接配接
51 OSSClient ossClient = this.getOSSClient();
52 //擷取檔案的字尾名稱
53 String ext = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."));
54 String fileName = getFileName(fileType, ext);
55 String url = null;
56 //通過ossclient擷取上傳檔案後傳回的url
57 ossClient.putObject(BucketName,fileName,new ByteArrayInputStream(multipartFile.getBytes()));
58 url = SufferUrl+fileName;
59 System.out.println("------>>上傳檔案成功,url:"+url);
60 ossClient.shutdown();
61 return url;
62 }
63
64 private String getFileName(String fileType, String ext) {
65 //上傳至oss的那個檔案夾 通過filename來指定 生成規則 // www.liangye123.com/img/20200814/jdg.png
66 String date = sdf.format(new Date());
67 if(StringUtils.isEmpty(fileType)){
68 fileType = "default";
69 }
70 //為了避免圖檔重名,使用UUID來命名圖檔
71 String uuid = UUID.randomUUID().toString().replace("-","");
72 //組合filename
73 String filename = fileType+"/"+date+"/"+uuid+ext;
74 return filename;
75 }
76
77 public static void main(String[] args) {
78 OssUtil ou = new OssUtil();
79 ou.getOSSClient();
80 }
81 }
測試類:
1 package com.aliyun.oss;
2
3 import org.junit.jupiter.api.Test;
4 import org.springframework.mock.web.MockMultipartFile;
5 import org.springframework.web.multipart.MultipartFile;
6
7 import java.io.File;
8 import java.io.FileInputStream;
9
10 import static org.junit.jupiter.api.Assertions.*;
11
12 class OssUtilTest {
13
14 @Test
15 void getOSSClient() {
16 }
17
18 @Test
19 void uploadDocuments() throws Exception{
20 assert(true);
21 File file = new File("H:/desktop/個人image/個人image/寬圖/a2c1f-wemjb.jpg");
22 FileInputStream in_file= new FileInputStream(file);
23 //File與MutipartFile的轉化
24 MultipartFile multipartFile = new MockMultipartFile("a2c1f-wemjb.jpg","a2c1f-wemjb.jpg","jpeg",in_file);
25 String url = new OssUtil().uploadDocuments(multipartFile,"jpg");
26 }
27 }
測試結果:

啊,圖檔應該不違規吧 QAQ