作者:陳惠,叩丁狼進階講師。原創文章,轉載請注明出處。
現在很多的網站都會用到大量的圖檔,而圖檔是網頁傳輸中占主要的資料量,也是影響網站性能的因素之一。是以很多網站都會将圖檔存儲從網站中分離出來,另外搭建一個或多個伺服器來存儲圖檔,而網頁上的圖檔都用一個URL位址來指向這些伺服器上的圖檔的位址,這樣的話網站的性能就明顯提高了。圖檔伺服器可以自己搭建,或者使用網上的雲伺服器,比如阿裡也有,本文選用的是七牛雲的對象存儲來實作。在七牛雲上個人注冊并且實名認證成功後可免費使用儲存空間10GB,用于測試是完全足夠了。
使用步驟:
1. 準備工作
注冊後進行實名認證,通過後可以獲得AccessKey以及SecretKey,主要是後面調用接口的時候需要使用。
2.建立存儲空間
點選”管理控制台”——> “對象存儲”——>”建立存儲空間”,并且填入對應的資訊。
如果你希望使用者在任何情況下都可以直接通路資源,可以直接将空間設為公開。
3.在項目中引入七牛雲提供的JAVA-SDK
注意:此 SDK 适用于 Java 7 及以上版本
使用maven的方式引入:
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.2.0, 7.2.99]</version>
</dependency>
這裡的
version
指定了一個版本範圍,每次更新
pom.xml
的時候會嘗試去下載下傳
7.2.x
版本中的最新版本,不過你也可以手動指定一個固定的版本。
4.使用SDK提供的圖檔上傳工具
七牛檔案上傳分為用戶端上傳(主要是指網頁端和移動端等面向終端使用者的場景)和服務端上傳兩種場景,具體可以參考官方文檔 ,文中使用的是服務端上傳的方式。
結合
SpringMVC
來上傳圖檔到七牛雲:
/**
* 檔案上傳工具
*/
public class UploadUtil {
/**
* 上傳到七牛雲
* @param file 上傳的圖檔
* @return 七牛雲中圖檔的名字
*/
public static String uploadQiniu(MultipartFile file) {
//構造一個帶指定Zone對象的配置類
Configuration cfg = new Configuration(Zone.zone2());
//...其他參數參考類注釋
UploadManager uploadManager = new UploadManager(cfg);
//...生成上傳憑證,然後準備上傳
String accessKey = "你的accessKey";
String secretKey = "你的secretKey";
//存儲空間的名字
String bucket = "wolfcode";
//預設不指定key的情況下,以檔案内容的hash值作為檔案名
String key = null;
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(file.getBytes(), key, upToken);
//解析上傳成功的結果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
return putRet.key;
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
備注:
1 七牛存儲支援空間建立在不同的機房,Zone對象是指定具體哪個機房
2 預設不指定key的情況下,以檔案内容的hash值作為檔案名,使用hash的好處還可以去除重複圖檔,重複上傳同一張圖檔,在七牛雲中隻會占用一個圖檔的空間。
3 上傳成功後的傳回的DefaultPutRet對象,裡面包含圖檔的hash值,和圖檔的key值其實就是檔案名。
最後一步,就是通路圖檔了,打開對象存儲空間,可以看到七牛雲配置設定的外鍊域名,以及上傳過的圖檔,把域名和圖檔的key值拼接在一起,就是圖檔的URL了,如:http://pgd3zoxnk.bkt.clouddn.com/FgaeuBs1QwDZUd9UO4betMtgZOMs