自定义七牛空间

  • 先在七牛云创建空间,如haien、haien2、llcweb这些,地区选择华南、华东都没问题,不过地区选择和后面的zone有关。目前定义的空间是llcweb,只能更换,不能同时定义多个空间。
  • 通过程序上传图片到极简图床,极简图床保存到自定义的空间。

    上传图片

  • 引入依赖(下面引入的是7.2.17,但是会引起incorrect region, please use up-z2.qiniup.com异常,必须更换为7.2.11版本)

    <dependency>
        <groupId>com.qiniu</groupId>
        <artifactId>qiniu-java-sdk</artifactId>
        <version>[7.2.0,7.2.99]</version> <!--自动选择最新版本-->
    </dependency>
    
  • 登录七牛云进入个人面板->密钥管理,复制公钥、私钥
  • 配置文件application.yml

    qiniu:
      accessKey: McAf9AJmcH3c86M_b4FM_Z0RQg45vgaDmBBbI2u3
      secretKey: j2AjkfuUscIwyIEJ1n6Yc4tsJTjPJIEPR0YyGF1P
      bucket: llcweb
      path: pfrai6t0h.bkt.clouddn.com
    
  • 编写主要逻辑service类

    @Service
    public class QiniuService {
        private static final Logger logger=LoggerFactory.getLogger(QiniuService.class);
    
        //注入常量如果出错的话那就多运行几次就自动解决了
        @Value("${qiniu.accessKey}")
        private String accesskey;
    
        @Value("${qiniu.secretKey}")
        private String secretKey;
    
        @Value("${qiniu.bucket}")
        private String bucket; //空间名称
    
        @Value("${qiniu.path}")
        private String path; //存储空间->空间概览中的测试域名
    
        /**
         * @Author haien
         * @Description 上传图片到七牛云 
         * @Date 2018/9/28
         * @Param [file, key] key: 保存在空间中的名字,为空会使用文件内容的hash值作为文件名
         * @return java.lang.String
         **/
        public String uploadImg(FileInputStream file, String key)throws QiniuException {
            //构造一个带指定Zone(区域)对象的配置类(七牛云的依赖记得加verson才有这个Zone类)
            Configuration cfg=new Configuration(Zone.zone2()); //llcweb是华南区域的
            //其他参数参考类注释
            UploadManager uploadManager=new UploadManager(cfg);
            Auth auth=Auth.create(accesskey,secretKey);
            String upToken=auth.uploadToken(bucket);
            //默认不指定key情况下,以文件内容的hash值作为文件名
            Response response=uploadManager.put(file,key,upToken,null,null);
            //解析上传成功的结果
            DefaultPutRet putRet=JSON.parseObject(response.bodyString(),DefaultPutRet.class);
            System.out.println(putRet.key); //即参数key
            System.out.println(putRet.hash); //根据文件内容生成的hash值
            String return_path=path+"/"+putRet.key;
            logger.info("保存地址: {}",return_path); //图片外链:http://return_path
            return return_path;
        }
    }
    
    • 其中的Zone:
      • zone0:华东
      • zone1:华北
      • zone2:华南
      • zoneNa0:北美
      • httpAutoZonehttp上传,自动识别上传区域
  • 上传接口方法(不考虑日志、异常、返回信息等)

    @RestController
    public class UploadController {
        private static final Logger logger=LoggerFactory.getLogger(UploadController.class);
    
        @Resource
        private QiniuService qiniuService;
    
        @RequestMapping("/image/qiniu")
        public Map<String,Object> uploadImage(@RequestParam("file")MultipartFile multipartFile){
            FileInputStream inputStream=(FileInputStream)multipartFile.getInputStream();
            String path=qiniuService.uploadImg(inputStream, Constants.getUUID()); //Constants是自定义的一个工具类
            return path;
        }
    }
    
  • 代码实例:SpringMvc02/QiniuService、Constants、UploadController