提醒:上傳的圖片最大長寬必須在3萬(單位應該是像素),超過三萬的可以上傳,但是顯示會有問題,會報錯,報錯信息如下所示:

OSS對象存儲中圖片的縮略圖/預覽圖獲取
1、簡單的原圖、縮略圖請求方式如下:
/** * @Author qtl * @Description * @Date 15:29 2020/9/29 * @Param [fileName] * @return java.lang.String **/ public static String getOSSFileUrl(String fileName){ if (!StringUtils.isEmpty(fileName)) { String url = "https://OSS空間名.oss-cn-hangzhou.aliyuncs.com/文件存儲目錄/" + fileName + "?x-oss-process=image/resize,m_lfit,h_60,w_60"; return url; }else{ return ""; } }
注意事項 / 解釋:
- 首先,需要注意的是此種方式的使用需要OSS對象存儲空間是公共的可讀的,否則(不是公共可讀的)需要在請求路徑后拼接簽名驗證信息;
- 傳入的參數【fileName】是指在要獲取的OSS對象存儲空間中的文件名;
- 【url】路徑的拼接:
- https://后拼接的是OSS對象存儲空間的空間名;
- 空間名后加上此空間所在的地區路徑(.oss-cn-hangzhou.aliyuncs.com);
- 地區路徑后就是文件所在OSS對象存儲上的路徑了,最后再拼上文件名;(此時即可獲得圖片原圖的訪問路徑了,如果需要獲取圖片的預覽圖,繼續進行下一步的拼接即可;)
- 獲取預覽圖時只需要拼接此代碼即可:+ "?x-oss-process=image/resize,m_lfit,h_60,w_60" (需要注意的是此中縮略圖是以60像素為基礎百分比進行縮放的,也就是說,以較長邊為60px,進行整體縮放,不會出現縮放后變形的問題,另外還有其他方式的縮放,具體請看阿里雲官方文檔:https://help.aliyun.com/document_detail/44688.html?spm=a2c4g.11186623.4.2.713e3bc2T2qLbM)
第二種:復雜的獲取原圖、縮略圖請求方式如下:
之所以復雜是因為OSS對象存儲空間是私密的,需要加上秦明進行驗證和連接超時設定,而連接超時設定又涉及到一個問題,那就是緩存的問題,下面進行總結時會詳細講述;
// endpoint
private static String endpoint="https://oss-cn-hangzhou.aliyuncs.com";
// accessKey
private static String accessKeyId="xxx";
private static String accessKeySecret="xxx";
// OSS對象存儲空間名
private static String bucketName="webplus-cn-hangzhou-s-xxxxxxxxx";
// 文件存儲目錄
private static String fileDir = "xxx/xxx/";
// 連接OSS服務實例
public OSSUpload() {
ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
}
/** * @Author qtl * @Description * @Date 15:29 2020/9/29 * @Param [fileName] * @return java.lang.String **/ public static String imageAbbreviation(String fileName){ if (!StringUtils.isEmpty(fileName)) { String[] split = fileName.split("/"); // 創建OSSClient實例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 將圖片縮放為60px后。 String style = "image/resize,m_lfit,h_60,w_60"; // 指定簽名URL過期時間為10分鍾。 Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10);
// 創建請求對象 GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, fileDir + split[split.length - 1], HttpMethod.GET);
// 對請求對象追加過期時長 req.setExpiration(expiration);
// 對請求對象追加樣式 req.setProcess(style);
// 生成最終訪問路徑 URL signedUrl = ossClient.generatePresignedUrl(req); // 關閉OSSClient。 ossClient.shutdown(); return signedUrl.toString(); }else{ return ""; } }
注意事項 / 解釋:
-
創建OSSClient實例中需要有三個參數,分別是【endpoint:OSS對象存儲服務器所在區路徑,
這個路徑可以在OSS服務器的控制台上找到】,【accessKeyId、accessKeySecret:是訪問阿里雲
API 的密鑰,盡量不要使用主密鑰,創建一個 RAM 子賬號並配上訪問資源權限即可】;

- 設定縮放寬高,只需要修改其中的數字進行調整即可;
- 指定訪問路徑過期時間,需要注意的是私人性質的OSS對象存儲空間在創建訪問請求時必須要設定過期時間,否者會報錯,設定時間時從毫秒開始計算;
- 創建請求對象步驟中需要將OSS對象存儲空間名稱【bucketName】、文件所在文件夾路徑【fileDir】也要添加上,最后再將請求超時時長和圖片樣式追加到請求對象上即可;
- 最后,不要忘記關閉OSS連接對象!
總結:
這兩種方式的大概區別已經在上面簡單的敘述過了,所以簡單的講一下這兩種方式的利弊:
- 第一種方式,簡單便捷,但是因為是公共讀的權限,因此對於保密性較高的數據不太友好,但是對於保密性不高的數據很好,因為這種請求連接是固定的,也就是說一個文件的訪問鏈接在文件不移動的情況下是一直有效的,可以進行緩存;
- 第二種,操作復雜,是私密讀的權限,安全性較高,但是無法進行緩存操作,因為數據的每次請求都需要對請求連接追加超時時間的,即使是同一個文件的請求每次也都不同,因此有緩存需求的用這種方式行不通;
pass:這些代碼是之前寫的,有同學發現存在問題或者有不懂的可以@我,看到后必回;
