阿里云对象存储, 服务端签名直传并设置上传回调自定义参数
上传回调服务响应OSS发送给应用服务器的POST消息,得到上文callbackBody的参数
@RequestMapping("/upload")
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String accessId = MultipartUploadSample.accessKeyId; // 请填写您的AccessKeyId。
String accessKey = MultipartUploadSample.accessKeySecret; // 请填写您的AccessKeySecret。
String endpoint = MultipartUploadSample.endpoint; // 请填写您的 endpoint。
String bucket = MultipartUploadSample.bucketName; // 请填写您的 bucketname 。
String host = "http://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint
// callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
String callbackUrl = "http://locahost:8080/callback";
String dir = "user-dir-prefix/"; // 用户上传文件时指定的前缀。
String type = request.getParameter("type");
if (type != null) {
if (type.equals("0")) {
dir = "image";
} else if (type.equals("1")) {
dir = "video";
} else if (type.equals("2")) {
dir = "speech";
}
}
OSSClient client = new OSSClient(endpoint, accessId, accessKey);
try {
long expireTime = 6000;
long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
Date expiration = new Date(expireEndTime);
PolicyConditions policyConds = new PolicyConditions();
policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
String postPolicy = client.generatePostPolicy(expiration, policyConds);
byte[] binaryData = postPolicy.getBytes(StandardCharsets.UTF_8);
String encodedPolicy = BinaryUtil.toBase64String(binaryData);
String postSignature = client.calculatePostSignature(postPolicy);
Map<String, String> respMap = new LinkedHashMap<String, String>();
respMap.put("accessid", accessId);
respMap.put("policy", encodedPolicy);
respMap.put("signature", postSignature);
respMap.put("dir", dir);
respMap.put("host", host);
respMap.put("expire", String.valueOf(expireEndTime / 1000));
JSONObject jasonCallback = new JSONObject();
jasonCallback.put("callbackUrl", callbackUrl);
jasonCallback.put("callbackBody",
"filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}");
jasonCallback.put("callbackBodyType", "application/x-www-form-urlencoded");
String base64CallbackBody = BinaryUtil.toBase64String(jasonCallback.toString().getBytes());
respMap.put("callback", base64CallbackBody);
JSONObject ja1 = JSONObject.fromObject(respMap);
// System.out.println(ja1.toString());
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET, POST");
CommonUtils.returnCode(response, ReturnData.success(ja1));
} catch (Exception e) {
// Assert.fail(e.getMessage());
CommonUtils.returnCode(response, ReturnData.fail());
}
}
本文介绍如何使用阿里云对象存储服务(OSS)进行服务端签名直传,并设置上传回调以获取自定义参数。通过SpringMVC框架实现上传接口,设置AccessKeyId、AccessKeySecret等参数,生成预签名URL,允许用户直接向OSS上传文件。同时,配置回调服务接收上传后的文件信息。
931

被折叠的 条评论
为什么被折叠?



