准备工作:
- 注册一个七牛云账号
- 申请 kodo 对象空间使用
- 创建 bucket
- 域名 C 记录解析 (如果没有域名的话可以使用七牛云的临时域名)
查看文档:
- 打开七牛云的首页:portal.qiniu.com/home
- 点击左上角的蓝色按钮,在抽屉中选择【产品与解决方案 > 对象存储 Kodo】
- 点击菜单右上角的文档按钮,选择【开发者中心】(developer.qiniu.com/)
- 点击对象存储,选择 Java SDK (developer.qiniu.com/kodo/1239/j…)。
到这一步,我们就可以阅读到如何使用 Java 进行七牛云上传的资料了。
补充
在日常开发中,我们需要先通读文档,然后再进行代码的编写!
环境准备:
参考:developer.qiniu.com/kodo/1239/j…
基本实现:
- 在操作之前,需要提供您的:
- AccessKey (简称 AK)
- SecretKey (简称 SK)
- Bucket (需要上传到的存储空间 (俗称【桶】))
String accessKey = "access key";
String secretKey = "secret key";
String bucket = "bucket name";
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
System.out.println(upToken);
-
客户端上传 - 客户端上传需要:
- 给客户端提供一个临时凭据(token)
- 客户端带上这个临时凭据上传文件
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
return upToken;
-
服务端上传 - 服务端完成全部的上传工作,需要:
- 配置上传信息(上传地区,bucket),生成上传对象
uploadManager - 生成临时凭据(token)
- 读取本地文件路径
- 将本地文件路径, 临时凭据 token,文件对应的 key 交个
uploadManager,调用uploadManager.put方法进行上传 - 拿到上传的
key和hash进行处理
- 配置上传信息(上传地区,bucket),生成上传对象
Configuration cfg = new Configuration(Region.region0());
cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
UploadManager uploadManager = new UploadManager(cfg);
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
Response response = uploadManager.put(localFilePath, key, upToken);
// 这里的 log 是 @Slf4j 的 (logback, log4j 也可以)
log.info("服务器上传成功!bodyString: {}, body: {}", response.bodyString(), response.body());
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
log.info("key: {}", putRet.key);
log.info("hash: {}", putRet.hash);
优化:
根据七牛云的文档和上述基本实现的苏鲁,我们可以封装一个这样的类: QiniuUpload.java
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
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;
import com.qiniu.storage.Region;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class QiniuUpload {
private String accessKey = "#{your_access_key}";
private String secretKey = "#{your_secret_key}";
private String bucket = "#{your_bucket}";
private String domain = "#{your_domain_name}";
/**
* @method getUploadToken
* @description 获取上传凭证 (用于客户端直传)
* @return
*/
public String getUploadToken() {
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
return upToken;
}
/**
* @method getOverrideUploadToken
* @description 获取上传覆盖凭证 (用于客户端直传)
* @return
*/
public String getOverrideUploadToken(String key) {
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket, key);
return upToken;
}
/**
* @method uploadFile
* @description 文件上传
* @param localFilePath 本地文件路径
* @param key 文件名
* @return
* @throws Exception
*/
public String uploadFile(String localFilePath, String key) throws QiniuException {
Configuration cfg = new Configuration(Region.region2());
cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
UploadManager uploadManager = new UploadManager(cfg);
String upToken = this.getUploadToken();
Response response = uploadManager.put(localFilePath, key, upToken);
log.info("服务器上传成功!bodyString: {}, body: {}", response.bodyString(), response.body());
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
log.info("key: {}", putRet.key);
log.info("hash: {}", putRet.hash);
return putRet.key;
}
}
这样,基本的上传功能 Bean 我们就准备好了。