アリクラウドオブジェクトストレージ、サービス側署名ダイレクト転送、アップロードコールバックカスタムパラメータの設定

3515 ワード

サービス側でコールバックを設定すると、署名ダイレクトサービスはクライアントがアプリケーションサーバに送信したGETメッセージに応答し、コードフラグメントは以下の通りである.
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="李四"と、独自の業務処理を行います.