一、七牛云简介
七牛云(隶属于上海七牛信息技术有限公司)是国内领先的以视觉智能和数据智能为核心的企业级云计算服务商,同时也是国内知名智能视频云服务商,累计为 70 多万家企业提供服务,覆盖了国内80%网民。围绕富媒体场景推出了对象存储、融合 CDN 加速、容器云、大数据平台、深度学习平台等产品、并提供一站式智能视频云解决方案。为各行业及应用提供可持续发展的智能视频云生态,帮助企业快速上云,创造更广阔的商业价值。
我们主要使用的是七牛云提供的对象存储服务来存储图片。
二、七牛云OSS基本使用
1、注册账号
打开七牛云官网 七牛云 | 简单 可信赖| 简单 可信赖" style="box-sizing: border-box; outline: none; margin: 0px; padding: 0px; text-decoration-line: none; cursor: pointer; color: rgb(78, 161, 219); font-synthesis-style: auto; overflow-wrap: break-word;">七牛云 | 简单 可信赖 进行账号注册—登录—实名认证
2、基本配置
(1) 新建存储空间
(2) 配置基本信息
自定义存储空间名称,存储区域选择离自己近的,访问控制选择公开。
(3) 验证是否创建成功
依次点击“上传文件”—“选择文件”—“开始上传”
查看结果
(4) 查看秘钥
鼠标放在头像上,点击“秘钥管理”,可以看到我们的AccessKey和SecretKey,后续的配置要用到。
这样,基本配置就完成啦!
三、Java项目集成OSS
参考七牛云官方文档 Java SDK_SDK 下载_对象存储 - 七牛开发者中心
1. 导入依赖:
<dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>[7.16.0, 7.16.99]</version> </dependency>
这里的version
指定了一个版本范围,每次更新pom.xml
的时候会尝试去下载7.16.x
版本中的最新版本,你可以手动指定一个固定的版本。
2. 编写配置文件application.properties
#七牛云oss配置信息 qiniu.accessKey=████████████████████████████████████ qiniu.secretKey=████████████████████████████████████ qiniu.bucket=████████████████████████████████████ qiniu.hostName=████████████████████████████████████
别忘了在项目的配置文件中加载application.properties。
多个配置文件使用逗号隔开
<context:property-placeholder location="classpath:db.properties,classpath:application.properties"/>
3. 封装工具类
在七牛开发者中心的 Java SDK 帮助文档中提供了图片上传和删除的官方使用案例,我对官方提供的使用案例进行了简单改造,封装成工具类 QiniuUtils,在项目中进行图片上传与删除时直接调用该工具类即可。
在自己项目的utils包下创建QiniuUtils类,在类中定义uploadByBytes()方法,用于图片上传。定义delete()方法,用于图片删除。
package com.qcby.utils; import com.google.gson.Gson; import com.qiniu.common.QiniuException; import com.qiniu.http.Response; import com.qiniu.storage.BucketManager; import com.qiniu.storage.Configuration; import com.qiniu.storage.Region; import com.qiniu.storage.UploadManager; import com.qiniu.storage.model.DefaultPutRet; import com.qiniu.util.Auth; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class QiniuUtils { // 通过 @Value 注解从配置文件中读取值 @Value("${qiniu.accessKey}") private String accessKey; @Value("${qiniu.secretKey}") private String secretKey; @Value("${qiniu.bucket}") private String bucket; @Value("${qiniu.hostName}") private String hostName; public String uploadByBytes(byte[] bytes,String fileName){ //构造一个带指定 Region 对象的配置类 Configuration cfg = new Configuration(Region.qvmHuabei()); cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本 //...其他参数参考类注释 UploadManager uploadManager = new UploadManager(cfg); //默认不指定key的情况下,以文件内容的hash值作为文件名 String key = fileName; Auth auth = Auth.create(accessKey, secretKey); String upToken = auth.uploadToken(bucket); try { Response response = uploadManager.put(bytes, key, upToken); //解析上传成功的结果 DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); System.out.println(putRet.key); System.out.println(putRet.hash); return hostName+putRet.key; } catch (QiniuException ex) { ex.printStackTrace(); if (ex.response != null) { System.err.println(ex.response); try { String body = ex.response.toString(); System.err.println(body); } catch (Exception ignored) { } } } return null; } /** *删除图片 * @param key * @return */ public String delete(String key){ Auth auth = Auth.create(accessKey,secretKey); Configuration cfg = new Configuration(Region.autoRegion()); BucketManager bucketManager = new BucketManager(auth, cfg); try { bucketManager.delete(bucket,key); }catch (QiniuException Q){ return Q.toString(); } System.out.println("success"); return null; } }
其中关于
Region
对象和机房的关系如下:
注意
若不指定
Region
或Region.autoRegion()
,则会使用 自动判断 区域,使用相应域名处理。如果可以明确 区域 的话,最好指定固定区域,这样可以少一步网络请求,少一步出错的可能。
官方文档的说明如上,但是根据我的实操,Region对象的区域名称好像发生了变化:
4. UploadController代码
package com.qcby.controller; import com.qcby.model.Result; import com.qcby.utils.QiniuUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.UUID; @Controller public class UploadController { @Autowired private QiniuUtils qiniuUtils; @ResponseBody @RequestMapping("/upload") public Result upload(MultipartFile multipartFile) throws IOException { //获取文件名称 String originalFilename = multipartFile.getOriginalFilename(); //获取后缀名 String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); //为了避免同名覆盖问题,构建新的文件名 String fileName = UUID.randomUUID().toString() + suffix; //调用七牛云OSS工具类 String url = qiniuUtils.uploadByBytes(multipartFile.getBytes(),fileName); //将图片上传完成后的url返回,用于浏览器回显展示 return Result.success(url); } }
5. 检验是否配置成功
由于我没写前端页面,我们使用postman对接口进行测试。
“Body选项卡”—“form-data”—输入key值—类型选择“file”—“Select Files”—“send”
查看结果:查看七牛云:
文件上传成功!
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://zblog.hqyman.cn/post/10213.html 非本站原创文章欢迎转载,原创文章需保留本站地址!


休息一下~~