天天看點

oss的簡單使用(已實作圖檔、視訊的成功上傳)

需要導入的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 }      

測試結果:

oss的簡單使用(已實作圖檔、視訊的成功上傳)
oss的簡單使用(已實作圖檔、視訊的成功上傳)

啊,圖檔應該不違規吧 QAQ