利用七牛雲作爲圖片服務器

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

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

   一、效果展示!

(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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章