由于 AK/SK 信息存放在客户端有泄漏风险,在客户端上传的过程中,通常需要服务端配合生成上传签名或凭证,下发给客户端。您可参考以下方法生成临时 Token 用于客户端上传。
服务端根据账号的 AK/SK 信息和相关的 policy 生成临时的上传密钥下发给客户端,客户端根据临时密钥和上传参数自行计算签名并发送 OpenAPI 请求。
调用接口前,请先完成 Java SDK 的安装及初始化操作。
package com.volcengine.example.imagex.v1; import com.alibaba.fastjson.JSON; import com.volcengine.model.sts2.SecurityToken2; import com.volcengine.service.imagex.IImageXService; import com.volcengine.service.imagex.impl.ImageXServiceImpl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 获取 STS2 的上传密钥(离线的) */ public class GetUploadSts2 { public static void main(String[] args) { // 默认 ImageX 实例为 `cn-north-1`,如果您想使用其他区域的实例,请使用 `ImageXServiceImpl.GetInstance(区域名)` 显式指定区域 IImageXService service = ImageXServiceImpl.getInstance(); service.setAccessKey("ak"); service.setSecretKey("sk"); List<String> serviceIds = new ArrayList<>(0); serviceIds.add("service id"); // 生成的 STS2 密钥可以用于哪些 ImageX 服务 try { // 默认超时时间为 1小时,如果有需要,请调用 imagex.getUploadSts2WithExpire() 来设置超时时间 // 您可以使用 imagex.getUploadSts2WithKeyPtn("表达式") 来限制上传的存储名格式 // 如: "test/*" 表示上传的文件必须包含 "test/" 前缀 HashMap<String, String> tag = new HashMap<>(); // tag 可如下配置 // Map<String, String> tag = new HashMap<>(); Map<String, Object> policy = new HashMap<>(); policy.put("FileSizeUpLimit","xxx"); policy.put("FileSizeBottomLimit","xxx"); policy.put("ContentTypeBlackList",new ArrayList<String>(){ { add("xxx"); add("yyy"); } }); policy.put("ContentTypeWhiteList",new ArrayList<String>(){ { add("xxx"); add("yyy"); } }); tag.put("UploadPolicy",JSON.toJSONString(policy)); tag.put("UploadOverwrite","True"); // tag.put("UploadOverwrite", "False"); System.out.println(tag); SecurityToken2 sts2 = service.getUploadSts2(serviceIds, tag); System.out.println(JSON.toJSONString(sts2)); } catch (Exception e) { e.printStackTrace(); } } }