在做毕设的时候,有一个需求: 上传一个图片到一个服务器,服务器存储图片后返加一个图片外链。
同事推荐了七牛云,于是去研究了一下七牛云官方文档。果然有收获。在此,记录一下自己探索过程,以便给遇到相同的需求的同志提供一些帮助。
一、效果展示!
(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