利用七牛云作为图片服务器

    在做毕设的时候,有一个需求: 上传一个图片到一个服务器,服务器存储图片后返加一个图片外链。

    同事推荐了七牛云,于是去研究了一下七牛云官方文档。果然有收获。在此,记录一下自己探索过程,以便给遇到相同的需求的同志提供一些帮助。

   一、效果展示!

(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

猜你喜欢

转载自blog.csdn.net/weixin_39454194/article/details/79560111
今日推荐