自定义七牛空间
- 先在七牛云创建空间,如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上传,自动识别上传区域
- 其中的Zone:
上传接口方法(不考虑日志、异常、返回信息等)
@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