前言
一、引入依赖
<!--七牛-->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>happy-dns-java</artifactId>
<version>0.1.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.2.0, 7.2.99]</version>
<exclusions>
<exclusion>
<artifactId>gson</artifactId>
<groupId>com.google.code.gson</groupId>
</exclusion>
<exclusion>
<artifactId>okhttp</artifactId>
<groupId>com.squareup.okhttp3</groupId>
</exclusion>
</exclusions>
</dependency>
二、配置常量
/**
* @ClassName QiNiuConstant
* @Description 七牛相关配置参数
* @Author liuwenjie
* @Date 2020/8/6 10:44
* @Version V1.0
*/
public class QiNiuConstant {
/**
* 账号相关key
*/
public static String ACCESS_KEY = "";
/**
* 账号秘钥
*/
public static String SECRET_KEY = "";
/**
* 要上传的空间
*/
public static String bucketName = "";
/**
* 返回的图片链接
*/
public static String domain = "";
/**
* 回调地址
*/
public static String notifyUrl="";
/**
* 回调地址主机名
*/
public static String notifyHost="";
}
编写上传代码
代码如下(示例):
{
String requestSource = request.getHeader("Request-Source");
String source = jsonObject.getString("source");
String suffix = jsonObject.getString("suffix");
String typeUuid = jsonObject.getString("typeUuid");
String isTranscode = jsonObject.getString("isTranscode");
String transcodeFormat = jsonObject.getString("transcodeFormat");
if (StringUtils.isEmpty(requestSource)) {
return new RetBean(false, CommonConstant.FAIL_CODE, "请求来源不能为空", null);
}
if (StringUtils.isEmpty(source)) {
return new RetBean(false, CommonConstant.FAIL_CODE, "资源来源不能为空", null);
}
if (StringUtils.isEmpty(suffix)) {
return new RetBean(false, CommonConstant.FAIL_CODE, "资源后缀名不能为空", null);
}
// 校验请求来源
switch (requestSource) {
case "shop":
// 商家端
List list = new ArrayList();
list.add("RESOURCE");
list.add("AVATAR");
boolean isValidShopSource = list.contains(source);
if (!isValidShopSource) {
return new RetBean(false, CommonConstant.FAIL_CODE, "资源来源值非法", null);
}
break;
case "user":
// 用户端
List list1 = new ArrayList();
list1.add("AVATAR");
list1.add("VIDEO");
list1.add("FILE");
boolean isValidUserSource = list1.contains(source);
if (!isValidUserSource) {
return new RetBean(false, CommonConstant.FAIL_CODE, "资源来源值非法", null);
}
break;
default:
// 非法
return new RetBean(false, CommonConstant.FAIL_CODE, "请求来源非法", null);
}
// 商家端资源上传
if (requestSource.equals("shop") && source.equals("RESOURCE")) {
if (StringUtils.isEmpty(typeUuid)){
typeUuid = "DEFAULT";
}
}
if (typeUuid != null){
typeUuid = "\"" + typeUuid + "\"";
}
//资源上传的随机key
String key = UUID.randomUUID().toString().replaceAll("\\-", "") + "." + suffix;
/*String deadline1 = new Date().toString();
System.out.println(deadline1);
Integer deadline = Integer.parseInt(deadline1)+3600;
String scope = QiNiuConstant.bucketName;
if (key!=null){
scope = scope + ":" + key;
}*/
//资源地址
String url = QiNiuConstant.domain + key;
Auth auth = Auth.create(QiNiuConstant.ACCESS_KEY, QiNiuConstant.SECRET_KEY);
StringMap putPolicy = new StringMap();
putPolicy.put("callbackUrl", QiNiuConstant.notifyUrl);
putPolicy.put("callbackBody", "{" +
"\"requestSource\":\""+requestSource+"\"," +
"\"source\":\""+source+"\"," +
"\"typeUuid\":"+typeUuid+"," +
"\"key\":\""+key+"\"," +
"\"name\":\"$(fname)\"," +
"\"fprefix\":\"$(fprefix)\"," +
"\"ext\":\"$(ext)\"," +
"\"size\":\"$(fsize)\"," +
"\"url\":\""+url+"\"," +
"\"mimeType\":\"$(mimeType)\"," +
"\"persistentId\":$(persistentId)" +
"}");
putPolicy.put("callbackBodyType", "application/json");
putPolicy.put("callbackHost", QiNiuConstant.notifyHost);
putPolicy.put("forceSaveKey", true);
putPolicy.put("saveKey", key);
long expireSeconds = 3600;
String upToken = auth.uploadToken(QiNiuConstant.bucketName, null, expireSeconds, putPolicy);
Map<String, Object> upMap = new HashMap<>();
upMap.put("key", key);
upMap.put("token", upToken);
return new RetBean(true, CommonConstant.SUCCESS_CODE, "获取token", upMap);
}
# 上传成功的接口回调
<font color=#999AAA >代码如下(示例):
```c
@PostMapping("uploadCallBack")
@ResponseBody
public RetBean uploadCallBack(@RequestBody JSONObject params) {
String requestSource = params.getString("requestSource");
String source = params.getString("source");
String typeUuid = params.getString("typeUuid");
String key = params.getString("key");
String name = params.getString("name");
String fprefix = params.getString("fprefix");
String ext = params.getString("ext");
String size = params.getString("size");
Long size1 = Long.valueOf(size);
String url = params.getString("url");
String mimeType = params.getString("mimeType");
String persistentId = params.getString("persistentId");
/**
业务相关代码
**/
}
return new RetBean(true, CommonConstant.SUCCESS_CODE, "success", params);
}
总结
此demo是基于springboot进行七牛云的文件上传,后端获取上传的token,
前端通过token去上传文件