アリクラウドオブジェクトストレージ、サービス側署名ダイレクト転送、アップロードコールバックカスタムパラメータの設定
3515 ワード
サービス側でコールバックを設定すると、署名ダイレクトサービスはクライアントがアプリケーションサーバに送信したGETメッセージに応答し、コードフラグメントは以下の通りである.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
その中のcallbackBody:filename=KaTeX parse error:Expected'EOF',got'&'at position 9:{object}&̲size={size}&mimeType=KaTeX parse error: Expected 'EOF', got '&' at position 11: {mimeType}&̲height={imageInfo.height}&width=${imageInfo.width}&val 1=「張三」&var 2=「李四」は、署名を取得する際に必要なパラメータを持ってcallbackBodyに書き込まれる.
コールバックサービス応答OSSがアプリケーションサーバに送信したPOSTメッセージをアップロードし、前述のcallbackBodyのパラメータを得る
filename="aa.txt"&size=140&mimeType=xxx&height=140&width=100&val 1="張三"&var 2="李四"と、独自の業務処理を行います.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String accessId = ""; // AccessKeyId。
String accessKey = ""; // AccessKeySecret。
String endpoint = "oss-cn-hangzhou.aliyuncs.com"; // endpoint。
String bucket = "bucket-name"; // bucketname 。
String host = "http://" + bucket + "." + endpoint; // host bucketname.endpoint
// callbackUrl URL, IP Port 。
String callbackUrl = "http://88.88.88.88:8888";
String dir = "user-dir-prefix/"; // 。
OSSClient client = new OSSClient(endpoint, accessId, accessKey);
try {
long expireTime = 30;
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("utf-8");
String encodedPolicy = BinaryUtil.toBase64String(binaryData);
String postSignature = client.calculatePostSignature(postPolicy);
Map respMap = new LinkedHashMap();
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));
// respMap.put("expire", formatISO8601Date(expiration));
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");
response(request, response, ja1.toString());
} catch (Exception e) {
// Assert.fail(e.getMessage());
System.out.println(e.getMessage());
}
}
その中のcallbackBody:filename=KaTeX parse error:Expected'EOF',got'&'at position 9:{object}&̲size={size}&mimeType=KaTeX parse error: Expected 'EOF', got '&' at position 11: {mimeType}&̲height={imageInfo.height}&width=${imageInfo.width}&val 1=「張三」&var 2=「李四」は、署名を取得する際に必要なパラメータを持ってcallbackBodyに書き込まれる.
コールバックサービス応答OSSがアプリケーションサーバに送信したPOSTメッセージをアップロードし、前述のcallbackBodyのパラメータを得る
filename="aa.txt"&size=140&mimeType=xxx&height=140&width=100&val 1="張三"&var 2="李四"と、独自の業務処理を行います.