完成服务器签名web直传并回调
This commit is contained in:
parent
515b4aee37
commit
49093ccee3
|
@ -1,6 +1,7 @@
|
||||||
package com.zheng.oss.common.constant;
|
package com.zheng.oss.common.constant;
|
||||||
|
|
||||||
import com.zheng.common.base.BaseConstants;
|
import com.zheng.common.base.BaseConstants;
|
||||||
|
import com.zheng.common.util.PropertiesFileUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* oss系统常量类
|
* oss系统常量类
|
||||||
|
@ -8,4 +9,16 @@ import com.zheng.common.base.BaseConstants;
|
||||||
*/
|
*/
|
||||||
public class OssConstant extends BaseConstants {
|
public class OssConstant extends BaseConstants {
|
||||||
|
|
||||||
|
// endpoint
|
||||||
|
public static final String ALIYUN_OSS_ENDPOINT = PropertiesFileUtil.getInstance("config").get("aliyun.oss.endpoint");
|
||||||
|
|
||||||
|
// bucketName
|
||||||
|
public static final String ALIYUN_OSS_BUCKET_NAME = PropertiesFileUtil.getInstance("config").get("aliyun.oss.bucketName");
|
||||||
|
|
||||||
|
// 文件大小
|
||||||
|
public static final int ALIYUN_OSS_MAX_SIZE = PropertiesFileUtil.getInstance("config").getInt("aliyun.oss.maxSize");
|
||||||
|
|
||||||
|
// 签名有效期(单位:分钟)
|
||||||
|
public static final int ALIYUN_OSS_EXPIRE = PropertiesFileUtil.getInstance("config").getInt("aliyun.oss.policy.expire");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
|
|
||||||
<description>zheng-oss-sdk</description>
|
<description>zheng-oss-sdk</description>
|
||||||
|
|
||||||
<context:property-placeholder location="classpath*:zheng-oss-client.properties"/>
|
<context:property-placeholder location="classpath*:config.properties"/>
|
||||||
|
|
||||||
<!-- 阿里云OSS客户端 -->
|
<!-- 阿里云OSS -->
|
||||||
<bean id="aliyunOssClient" class="com.aliyun.oss.OSSClient">
|
<bean id="aliyunOssClient" class="com.aliyun.oss.OSSClient">
|
||||||
<constructor-arg value="${aliyun.oss.endpoint}"/>
|
<constructor-arg value="${aliyun.oss.endpoint}"/>
|
||||||
<constructor-arg value="${aliyun.oss.accessKeyId}"/>
|
<constructor-arg value="${aliyun.oss.accessKeyId}"/>
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
package com.zheng.oss.web.controller;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.zheng.oss.common.constant.OssResult;
|
||||||
|
import com.zheng.oss.common.constant.OssResultConstant;
|
||||||
|
import com.zheng.oss.web.service.AliyunOssService;
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.converter.json.MappingJacksonValue;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by ZhangShuzheng on 2017/5/15.
|
||||||
|
*/
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/aliyun/oss")
|
||||||
|
public class AliyunOssController {
|
||||||
|
|
||||||
|
private static Logger _log = LoggerFactory.getLogger(AliyunOssController.class);
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AliyunOssService aliyunOssService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 签名生成
|
||||||
|
* @param callback 跨域请求
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/policy")
|
||||||
|
@ResponseBody
|
||||||
|
//@CrossOrigin(origins = "*", methods = RequestMethod.GET) // 该注解不支持JDK1.7
|
||||||
|
public Object policy(@RequestParam(required = false) String callback) {
|
||||||
|
JSONObject result = aliyunOssService.policy();
|
||||||
|
if (StringUtils.isBlank(callback)) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
MappingJacksonValue jsonp = new MappingJacksonValue(result);
|
||||||
|
jsonp.setJsonpFunction(callback);
|
||||||
|
return jsonp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传成功回调方法
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("callback")
|
||||||
|
@ResponseBody
|
||||||
|
public Object callback(HttpServletRequest request) {
|
||||||
|
JSONObject data = new JSONObject();
|
||||||
|
data.put("filename", request.getParameter("filename"));
|
||||||
|
data.put("size", request.getParameter("size"));
|
||||||
|
data.put("mimeType", request.getParameter("mimeType"));
|
||||||
|
data.put("width", request.getParameter("width"));
|
||||||
|
data.put("height", request.getParameter("height"));
|
||||||
|
return new OssResult(OssResultConstant.SUCCESS, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,13 +2,14 @@ package com.zheng.oss.web.controller;
|
||||||
|
|
||||||
import com.aliyun.oss.OSSClient;
|
import com.aliyun.oss.OSSClient;
|
||||||
import com.aliyun.oss.model.OSSObject;
|
import com.aliyun.oss.model.OSSObject;
|
||||||
import com.aliyun.oss.model.ObjectListing;
|
|
||||||
import com.aliyun.oss.model.PutObjectResult;
|
import com.aliyun.oss.model.PutObjectResult;
|
||||||
import com.zheng.common.util.PropertiesFileUtil;
|
import com.zheng.oss.common.constant.OssConstant;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.ui.ModelMap;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
|
@ -20,29 +21,28 @@ import java.io.*;
|
||||||
@RequestMapping("/demo")
|
@RequestMapping("/demo")
|
||||||
public class DemoController {
|
public class DemoController {
|
||||||
|
|
||||||
|
private static Logger _log = LoggerFactory.getLogger(DemoController.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private OSSClient aliyunOssClient;
|
private OSSClient aliyunOssClient;
|
||||||
|
|
||||||
private String endPoint = PropertiesFileUtil.getInstance("zheng-oss-client").get("aliyun.oss.endpoint");
|
|
||||||
private String bucketName = PropertiesFileUtil.getInstance("zheng-oss-client").get("aliyun.oss.bucketName");
|
|
||||||
|
|
||||||
@GetMapping("/aliyun/upload1")
|
@GetMapping("/aliyun/upload1")
|
||||||
public String upload1() {
|
public String upload1() {
|
||||||
PutObjectResult putObjectResult = aliyunOssClient.putObject(bucketName, "text.txt", new ByteArrayInputStream("Hello OSS".getBytes()));
|
PutObjectResult putObjectResult = aliyunOssClient.putObject(OssConstant.ALIYUN_OSS_BUCKET_NAME, "text.txt", new ByteArrayInputStream("Hello OSS".getBytes()));
|
||||||
return "success";
|
return "success";
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/aliyun/upload2")
|
@GetMapping("/aliyun/upload2")
|
||||||
public String upload2() throws FileNotFoundException {
|
public String upload2() throws FileNotFoundException {
|
||||||
File file = new File("C:\\Users\\shuzheng\\Documents\\zheng.png");
|
File file = new File("d:\\zheng.png");
|
||||||
PutObjectResult putObjectResult = aliyunOssClient.putObject(bucketName, "file.png", file);
|
PutObjectResult putObjectResult = aliyunOssClient.putObject(OssConstant.ALIYUN_OSS_BUCKET_NAME, "file.png", file);
|
||||||
return "success";
|
return "success";
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/aliyun/download1")
|
@GetMapping("/aliyun/download1")
|
||||||
public String download1() throws IOException {
|
public String download1() throws IOException {
|
||||||
StringBuffer result = new StringBuffer();
|
StringBuffer result = new StringBuffer();
|
||||||
OSSObject ossObject = aliyunOssClient.getObject(bucketName, "text.txt");
|
OSSObject ossObject = aliyunOssClient.getObject(OssConstant.ALIYUN_OSS_BUCKET_NAME, "text.txt");
|
||||||
InputStream content = ossObject.getObjectContent();
|
InputStream content = ossObject.getObjectContent();
|
||||||
if (content != null) {
|
if (content != null) {
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
|
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
|
||||||
|
@ -58,7 +58,7 @@ public class DemoController {
|
||||||
|
|
||||||
@GetMapping("/aliyun/download2")
|
@GetMapping("/aliyun/download2")
|
||||||
public String download2() throws IOException {
|
public String download2() throws IOException {
|
||||||
return "http://" + bucketName + "." + endPoint + "/file.png";
|
return "http://" + OssConstant.ALIYUN_OSS_BUCKET_NAME + "." + OssConstant.ALIYUN_OSS_ENDPOINT + "/file.png";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
package com.zheng.oss.web.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.aliyun.oss.OSSClient;
|
||||||
|
import com.aliyun.oss.common.utils.BinaryUtil;
|
||||||
|
import com.aliyun.oss.model.MatchMode;
|
||||||
|
import com.aliyun.oss.model.PolicyConditions;
|
||||||
|
import com.zheng.oss.common.constant.OssConstant;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by ZhangShuzheng on 2017/5/15.
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class AliyunOssService {
|
||||||
|
|
||||||
|
private static Logger _log = LoggerFactory.getLogger(AliyunOssService.class);
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private OSSClient aliyunOssClient;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 签名生成
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public JSONObject policy() {
|
||||||
|
JSONObject result = new JSONObject();
|
||||||
|
// 存储目录
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
||||||
|
String dir = sdf.format(new Date());
|
||||||
|
// 签名有效期
|
||||||
|
long expireEndTime = System.currentTimeMillis() + OssConstant.ALIYUN_OSS_EXPIRE * 1000;
|
||||||
|
Date expiration = new Date(expireEndTime);
|
||||||
|
// 文件大小
|
||||||
|
long maxSize = OssConstant.ALIYUN_OSS_MAX_SIZE * 1024 * 1024;
|
||||||
|
// 回调
|
||||||
|
JSONObject callback = new JSONObject();
|
||||||
|
callback.put("callbackUrl", "http://shuzheng.tunnel.qydev.com/aliyun/oss/callback");
|
||||||
|
callback.put("callbackBody", "filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}");
|
||||||
|
callback.put("callbackBodyType", "application/x-www-form-urlencoded");
|
||||||
|
try {
|
||||||
|
PolicyConditions policyConds = new PolicyConditions();
|
||||||
|
policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, maxSize);
|
||||||
|
policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
|
||||||
|
String postPolicy = aliyunOssClient.generatePostPolicy(expiration, policyConds);
|
||||||
|
byte[] binaryData = postPolicy.getBytes("utf-8");
|
||||||
|
String policy = BinaryUtil.toBase64String(binaryData);
|
||||||
|
String signature = aliyunOssClient.calculatePostSignature(postPolicy);
|
||||||
|
String callbackData = BinaryUtil.toBase64String(callback.toString().getBytes("utf-8"));
|
||||||
|
// 返回结果
|
||||||
|
result.put("OSSAccessKeyId", aliyunOssClient.getCredentialsProvider().getCredentials().getAccessKeyId());
|
||||||
|
result.put("policy", policy);
|
||||||
|
result.put("signature", signature);
|
||||||
|
result.put("dir", dir);
|
||||||
|
result.put("callback", callbackData);
|
||||||
|
} catch (Exception e) {
|
||||||
|
_log.error("签名生成失败", e);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1 +1,10 @@
|
||||||
env=${profile.env}
|
env=${profile.env}
|
||||||
|
|
||||||
|
### aliyun oss ###
|
||||||
|
aliyun.oss.endpoint=${aliyun.oss.endpoint}
|
||||||
|
aliyun.oss.endpoint.internal=${aliyun.oss.endpoint.internal}
|
||||||
|
aliyun.oss.accessKeyId=${aliyun.oss.accessKeyId}
|
||||||
|
aliyun.oss.accessKeySecret=${aliyun.oss.accessKeySecret}
|
||||||
|
aliyun.oss.bucketName=${aliyun.oss.bucketName}
|
||||||
|
aliyun.oss.policy.expire=${aliyun.oss.policy.expire}
|
||||||
|
aliyun.oss.maxSize=${aliyun.oss.maxSize}
|
|
@ -1,5 +1,10 @@
|
||||||
profile.env=dev
|
profile.env=dev
|
||||||
|
|
||||||
### aliyun ###
|
### aliyun oss ###
|
||||||
aliyun.oss.endpoint=http://shuzheng.oss-cn-shanghai.aliyuncs.com
|
aliyun.oss.endpoint=oss-cn-shanghai.aliyuncs.com
|
||||||
aliyun.oss.endpoint.internal=http://shuzheng.oss-cn-shanghai-internal.aliyuncs.com
|
aliyun.oss.endpoint.internal=oss-cn-shanghai-internal.aliyuncs.com
|
||||||
|
aliyun.oss.accessKeyId=
|
||||||
|
aliyun.oss.accessKeySecret=
|
||||||
|
aliyun.oss.bucketName=shuzheng
|
||||||
|
aliyun.oss.policy.expire=30
|
||||||
|
aliyun.oss.maxSize=10
|
|
@ -1 +1,10 @@
|
||||||
profile.env=prod
|
profile.env=prod
|
||||||
|
|
||||||
|
### aliyun oss ###
|
||||||
|
aliyun.oss.endpoint=oss-cn-shanghai.aliyuncs.com
|
||||||
|
aliyun.oss.endpoint.internal=oss-cn-shanghai-internal.aliyuncs.com
|
||||||
|
aliyun.oss.accessKeyId=
|
||||||
|
aliyun.oss.accessKeySecret=
|
||||||
|
aliyun.oss.bucketName=shuzheng_prod
|
||||||
|
aliyun.oss.policy.expire=30
|
||||||
|
aliyun.oss.maxSize=10
|
|
@ -1 +1,10 @@
|
||||||
profile.env=test
|
profile.env=test
|
||||||
|
|
||||||
|
### aliyun oss ###
|
||||||
|
aliyun.oss.endpoint=oss-cn-shanghai.aliyuncs.com
|
||||||
|
aliyun.oss.endpoint.internal=oss-cn-shanghai-internal.aliyuncs.com
|
||||||
|
aliyun.oss.accessKeyId=
|
||||||
|
aliyun.oss.accessKeySecret=
|
||||||
|
aliyun.oss.bucketName=shuzheng_test
|
||||||
|
aliyun.oss.policy.expire=30
|
||||||
|
aliyun.oss.maxSize=10
|
|
@ -1,5 +0,0 @@
|
||||||
### aliyun oss ###
|
|
||||||
aliyun.oss.endpoint=oss-cn-shanghai.aliyuncs.com
|
|
||||||
aliyun.oss.accessKeyId=LTAIf5dDIthJN3h0
|
|
||||||
aliyun.oss.accessKeySecret=2IZVHc1Qzxul8rC0ZQGKCEjjnpvm5d
|
|
||||||
aliyun.oss.bucketName=shuzheng
|
|
Loading…
Reference in New Issue