在做畢設的時候,有一個需求: 上傳一個圖片到一個服務器,服務器存儲圖片後返加一個圖片外鏈。
同事推薦了七牛雲,於是去研究了一下七牛雲官方文檔。果然有收穫。在此,記錄一下自己探索過程,以便給遇到相同的需求的同志提供一些幫助。
一、效果展示!
(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