利用七牛雲作為圖片伺服器

    在做畢設的時候,有一個需求: 上傳一個圖片到一個伺服器,伺服器儲存圖片後返加一個圖片外鏈。

    同事推薦了七牛雲,於是去研究了一下七牛雲官方文件。果然有收穫。在此,記錄一下自己探索過程,以便給遇到相同的需求的同志提供一些幫助。

   一、效果展示!

(1)選擇好圖片,請求介面後,圖片儲存在七牛雲,後臺把圖片的外鏈返回

(2)訪問這個外鏈,可展示圖片

(二)步驟展示(關鍵程式碼)

(1) 封裝上傳圖片方法

package com.wyu.graduation.utils;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
/**
 * 利用七牛去官方的jdk
 * Created by Administrator on 2018/3/14 0014.
 */
public class Qiniu {
  //根據七牛雲的個人中心來填寫  
private static final String accessKey = "xxx";
private static final String secretKey = "xxx";
private static final String bucket = "xxx";
/**
     * @param  data
     * @return  外來鍵地址
     */
    public static String upLoadImage(byte[] data){
//圖片的外鏈地址
StringBuffer imgUrl  = new StringBuffer("http://p5k92qj55.bkt.clouddn.com/");
//構造一個帶指定Zone物件的配置類
Configuration cfg = new Configuration(Zone.zone0());
UploadManager uploadManager = new UploadManager(cfg);
//...生成上傳憑證,然後準備上傳
//預設不指定key的情況下,以檔案內容的hash值作為檔名
String key = null;
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
//上傳檔案
Response response = uploadManager.put(data,key,upToken);
//解析上傳成功的結果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
imgUrl.append(putRet.key);
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
return imgUrl.toString();
}
public static void main(String[] args) {
}
}

這裡是根據七牛雲的官方文件的demo來編寫的。文章最後將給出官方文件的地址。這段程式碼最關鍵的地方就在於

uploadManager.put(data,key,upToken)

這是jdk原始碼關於這個函式的解釋。。

在uploadImg() 這個函式,有幾個重要的引數。在七牛雲開發者中心可以找到。另外需要注意,這個函式只適用公開空間。

accessKey: Access 金鑰

secretKey :Secret 金鑰

bucket: 儲存空間

(2) 封裝restful api 介面

import com.wyu.graduation.domain.Result;
import com.wyu.graduation.utils.Qiniu;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by Administrator on 2018/3/14 0014.
 */
@RestController
public class QiniuApi {
@PostMapping("/thirdApi/qiniu/img")
public Result upImg(@RequestParam("file")MultipartFile multipartFile) throws IOException {
byte[]  imgBytes = multipartFile.getBytes();
//MultipartFile 轉 位元組陣列
String imgUrl = Qiniu.upLoadImage(imgBytes);
Map map = new HashMap<>();
map.put("imgUrl",imgUrl);
return Result.genSuccessResult(map);
}
}

在這個方法中,做了兩件事: (1)把前端傳過來的MultipartFile 轉化為 byte[] 字元陣列,(2)把圖片上傳後的外鏈地址返回前端。

參考文件:

1、https://developer.qiniu.com/kodo/sdk/1239/java