概述
七牛云对象存储服务提供高可靠、强安全、低成本、可扩展的非结构化数据的存储服务。它提供简单的 Web 服务接口,可以通过七牛开发者平台或客户端存储和检索任意数量的数据,支持 “按使用付费” 模式,可以通过调用REST API 接口和 SDK开发工具包访问,下载协议采用HTTP 和 HTTPS 协议。方便程序员聚焦业务应用,而无需关注底层存储实现技术。
使用七牛云实现图片存储也比较简单只需要按照如下的步骤操作即可:
账户申请
1) 进入七牛云官方网站注册开发者账户
七牛云是通过邮箱注册的,注册激活后就进行认证,认证后即可开通对象存储业务了
2)创建存储空间 Bucket
点击左侧左侧菜单 对象存储,一开始我们需要新建一个存储空间来存放我们的图片资源。点击新建存储空间,设置一些需要的内容,然后在左侧的存储空间列表我们就可以看到新加的空间了。
账号注册有些需要注意的点如下:
注册账号之后需要实名认证(个人/企业) 实名认证之后才可以创建存储空间
存储空间创建成功之后,找到个人中心获取accessKey,secretKey和存储空间名称就可以进行上传操作了
入门案例
七牛对象存储将数据文件以资源的形式上传到空间中。可以创建一个或者多个空间,然后向每个空间中上传一个或 多个文件。通过获取已上传文件的地址进行文件的分享和下载
搭建环境
com.qiniu
qiniu-java-sdk
[7.2.0, 7.2.99]
文件上传
@Test
public void testUploadImage() {
Configuration cfg = new Configuration(Zone.zone0()); UploadManager uploadManager = new UploadManager(cfg);
String accessKey = "COuoDRVa7JLsuurzIvQSI_pEDceHDw3yGfJEmvwv"; String secretKey = "3RWpTjB5Jxg3QosUFr4mxbHXJ5JR2m6AHQqYsSlr";
String bucket = "test-bucket";
String localFilePath = "C:\\Users\\ThinkPad\\Desktop\\ihrm\\day9\\资源\\照片
\\001.png";
//默认不指定key的情况下,以文件内容的hash值作为文件名String key = "test";
Auth auth = Auth.create(accessKey, secretKey); String upToken = auth.uploadToken(bucket); try {
Response response = uploadManager.put(localFilePath, key, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(response.bodyString());
} catch (QiniuException ex) { Response r = ex.response; System.err.println(r.toString()); try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
}
断点续传
@Test
public void testUploadImage1() {
Configuration cfg = new Configuration(Zone.zone0());
String accessKey = "COuoDRVa7JLsuurzIvQSI_pEDceHDw3yGfJEmvwv"; String secretKey = "3RWpTjB5Jxg3QosUFr4mxbHXJ5JR2m6AHQqYsSlr"; String bucket = "test-bucket";
String key = "test";
Auth auth = Auth.create(accessKey, secretKey); String upToken = auth.uploadToken(bucket);
String localFilePath = "C:\\Users\\ThinkPad\\Desktop\\ihrm\\day9\\资源
\\test.xlsx";
String localTempDir = Paths.get(System.getProperty("java.io.tmpdir"), bucket).toString();
System.out.println(localTempDir);
try {
//设置断点续传文件进度保存目录
FileRecorder fileRecorder = new FileRecorder(localTempDir); UploadManager uploadManager = new UploadManager(cfg, fileRecorder); try {
Response response = uploadManager.put(localFilePath, key, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key); System.out.println(putRet.hash);
} catch (QiniuException ex) { Response r = ex.response; System.err.println(r.toString()); try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
} catch (IOException ex) { ex.printStackTrace();
}
文件下载
对于公开空间,其访问的链接主要是将空间绑定的域名(可以是七牛空间的默认域名或者是绑定的自定义域名)拼
接上空间里面的文件名即可访问,标准情况下需要在拼接链接之前,将文件名进行符。
七牛云实现图片上传
(1)创建文件上传的工具类
public class QiniuUploadUtil {
private static final String accessKey = "COuoDRVa7JLsuurzIvQSI_pEDceHDw3yGfJEmvwv"; private static final String secretKey = "3RWpTjB5Jxg3QosUFr4mxbHXJ5JR2m6AHQqYsSlr"; private static final String bucket = "test-bucket";
private static final String prix = "http://pk9vj7em6.bkt.clouddn.com/"; private UploadManager manager;
public QiniuUploadUtil() {
//初始化基本配置
Configuration cfg = new Configuration(Zone.zone0());
//创建上传管理器
manager = new UploadManager(cfg);
}
public String upload(String imgName , byte [] bytes) { Auth auth = Auth.create(accessKey, secretKey);
//构造覆盖上传token
String upToken = auth.uploadToken(bucket,imgName); try {
Response response = manager.put(bytes, imgName, upToken); DefaultPutRet putRet = new Gson().fromJson(response.bodyString(),
DefaultPutRet.class);
//返回请求地址
return prix+putRet.key+"?t="+new Date().getTime();
} catch (Exception ex) { ex.printStackTrace();
}
return null;
}
}
(2)使用七牛云实现图片上传
修改UserService方法
public String uploadImage(String id, MultipartFile file) throws Exception { User user = userDao.findById(id).get();
String key = new QiniuUploadUtil().upload(user.getId(), file.getBytes()); if(key != null) {
user.setStaffPhoto(key); userDao.save(user);
}
return key;
}