You need to enable JavaScript to run this app.
导航
生成上传凭证
最近更新时间:2024.04.23 19:11:41首次发布时间:2021.02.23 10:42:29

由于 AK/SK 信息存放在客户端有泄漏风险,在客户端上传的过程中,通常需要服务端配合生成上传签名或凭证,下发给客户端。您可参考以下方法生成临时 Token 用于客户端上传

背景说明

服务端根据账号的 AK/SK 信息和相关的 policy 生成临时的上传密钥下发给客户端,客户端根据临时密钥和上传参数自行计算签名并发送 OpenAPI 请求。

  • 服务端仅生成临时密钥,具体签名计算过程在客户端进行;
  • OpenAPI 的所有请求参数均可参与签名过程;
  • 根据临时密钥无法反推出账号 AK/SK,泄漏风险低。

前提条件

调用接口前,请先完成 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();
        }
    }
}