全部产品
Search
文档中心

内容安全:文档审核2.0版SDK及接入指南

更新时间:Jan 05, 2026

文档审核2.0版支持SDK方式调用和原生HTTPS方式调用。推荐您使用SDK接入,可免去签名验证以及Body格式构建等细节步骤。本文介绍文档审核2.0版接入的方式。

步骤一:开通服务

访问开通内容审核2.0版服务页面,开通文档审核2.0版服务。接口接入使用后系统会按使用量自动出账,具体信息,请参见计费说明

开通文档审核2.0版服务后,默认付费方式是按量后付费,且按照实际用量结算当日费用,不调用服务不收费。

步骤二:为RAM用户授权

在接入SDK或者API之前,您需要为RAM用户授权。您可以为RAM用户创建一个访问密钥(AccessKey)。在调用阿里云API时您需要使用AccessKey完成身份验证。获取方式,请参见获取AccessKey

操作步骤

  1. 使用阿里云账号登录RAM控制台

  2. 创建RAM用户。

    具体操作,请参见创建RAM用户

  3. 向RAM用户授权系统策略权限:AliyunYundunGreenWebFullAccess

    具体操作,请参见为RAM用户授权

    完成以上配置后,您可以使用RAM用户调用内容安全API。

步骤三:安装并接入文档审核服务

目前支持的接入地域为:

地域

外网接入地址

内网接入地址

支持的服务

新加坡

green-cip.ap-southeast-1.aliyuncs.com

green-cip-vpc.ap-southeast-1.aliyuncs.com

document_detection_global

说明

如果需要其他语言的SDK示例代码,您可以通过OpenAPI 开发者门户在线调试工具调试API接口,该工具会自动生成相应API的SDK调用示例代码。

阿里云SDK代码通过定义ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET环境变量来创建默认的访问凭证。调用接口时,程序直接访问凭证,读取您的访问密钥(即AccessKey)并自动完成鉴权。您在接入SDK代码示例之前,请先配置环境变量。具体操作,请参见身份验证配置

API接口字段说明请参考文档审核2.0版API

Java SDK

支持Java 1.8及以上版本。

原始代码,请参见Java SDK源码或者Java SDK源码(OSS路径)

支持以下三种类型的文档检测。

对公网可访问文档进行检测

使用场景

当需要审核的文档可通过公网链接访问时,文档审核2.0版服务可通过文档URL获取文件后进行审核。

在pom.xml中加入相应依赖,就可以在Maven工程中使用SDK。

  1. dependencies中添加如下依赖:

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>3.0.1</version>
    </dependency>
  2. 接入Java SDK。

    • 提交文档检测任务代码示例

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.FileModerationRequest; 
      import com.aliyun.green20220302.models.FileModerationResponse; 
      import com.aliyun.green20220302.models.FileModerationResponseBody; 
      import com.aliyun.teaopenapi.models.Config;
      
      public class FileModerationDemo {
          public static void main(String[] args) throws Exception {
              Config config = new Config();
               /**
               * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
               * 常见获取环境变量方式:
               * 方式一:
               *     获取RAM用户AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     获取RAM用户AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     获取RAM用户AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     获取RAM用户AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建议从环境变量中获取RAM用户AccessKey ID");
              config.setAccessKeySecret("建议从环境变量中获取RAM用户AccessKey Secret");
              //接入区域和地址请根据实际情况修改。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //连接时超时时间,单位毫秒(ms)。
              config.setReadTimeout(6000);
              //读取时超时时间,单位毫秒(ms)。
              config.setConnectTimeout(3000);
      
              Client client = new Client(config);
              JSONObject serviceParameters = new JSONObject();
              serviceParameters.put("url", "https://xxx.oss.aliyuncs.com/xxx.pdf"); // 文件URL
      
              FileModerationRequest fileModerationRequest = new FileModerationRequest(); 
              // 检测类型:document_detection 通用文档检测
              fileModerationRequest.setService("document_detection_global");
              fileModerationRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  FileModerationResponse response = client.fileModeration(fileModerationRequest); 
                  if (response.getStatusCode() == 200) {
                      FileModerationResponseBody result = response.getBody(); 
                      System.out.println(JSON.toJSONString(result));
                      System.out.println("requestId = " + result.getRequestId());
                      System.out.println("code = " + result.getCode());
                      System.out.println("msg = " + result.getMessage());
                      Integer code = result.getCode();
                      if (200 == code) {
                          FileModerationResponseBody.FileModerationResponseBodyData data = result.getData();
                          System.out.println("taskId = [" + data.getTaskId() + "]");
                      } else {
                          System.out.println("file moderation not success. code:" + code);
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
      
    • 获取文档检测任务结果

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.DescribeFileModerationResultRequest;
      import com.aliyun.green20220302.models.DescribeFileModerationResultResponse;
      import com.aliyun.green20220302.models.DescribeFileModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class DescribeFileModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
               * 常见获取环境变量方式:
               * 方式一:
               *     获取RAM用户AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     获取RAM用户AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     获取RAM用户AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     获取RAM用户AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建议从环境变量中获取RAM用户AccessKey ID");
              config.setAccessKeySecret("建议从环境变量中获取RAM用户AccessKey Secret");
              //接入区域和地址请根据实际情况修改
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //连接时超时时间,单位毫秒(ms)。
              config.setReadTimeout(6000);
              //读取时超时时间,单位毫秒(ms)。
              config.setConnectTimeout(3000);
            
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // 提交任务时返回的taskId
              serviceParameters.put("taskId", "fi_f_O5z5i*********-1xxp0V");
      
      
              DescribeFileModerationResultRequest describeFileModerationResultRequest = new DescribeFileModerationResultRequest();
              
              describeFileModerationResultRequest.setService("document_detection_global");
              describeFileModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  DescribeFileModerationResultResponse response = client.describeFileModerationResult(describeFileModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      DescribeFileModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          DescribeFileModerationResultResponseBody.DescribeFileModerationResultResponseBodyData data = result.getData();
                          System.out.println("pageResult = " + JSON.toJSONString(data.getPageResult()));
                          System.out.println("dataId = " + data.getDataId());
                          System.out.println("url = " + data.getUrl());
                      } else {
                          System.out.println("file moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

对本地文档进行检测

使用场景

当您需要审核的文档在本地机器且无公网访问链接,您可以将文档上传到内容安全提供的对象存储OSS Bucket中,文档审核2.0版服务可直接访问对象存储OSS,获取到文档内容后进行审核。

  1. dependencies中添加如下依赖:

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>3.0.1</version>
    </dependency>

    安装OSS SDK:

    <dependency>
      <groupId>com.aliyun.oss</groupId>
      <artifactId>aliyun-sdk-oss</artifactId>
      <version>3.16.3</version>
    </dependency>
  2. 接入Java SDK。

    • 提交文档检测任务代码示例

      import com.alibaba.fastjson.JSON;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.DescribeUploadTokenResponse;
      import com.aliyun.green20220302.models.DescribeUploadTokenResponseBody;
      import com.aliyun.green20220302.models.FileModerationRequest;
      import com.aliyun.green20220302.models.FileModerationResponse;
      import com.aliyun.green20220302.models.FileModerationResponseBody;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.model.PutObjectRequest;
      import com.aliyun.teaopenapi.models.Config;
      import com.aliyun.teautil.models.RuntimeOptions;
      
      import java.io.File;
      import java.util.HashMap;
      import java.util.Map;
      import java.util.UUID;
      
      public class FileModerationFile {
          /**服务是否部署在vpc上*/
          public static boolean isVPC = false;
      
          /**文件上传token endpoint->token*/
          public static Map<String, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData> tokenMap = new HashMap<>();
      
          /**上传文件请求客户端*/
          public static OSS ossClient = null;
      
          /**
           * 创建请求客户端
           *
           * @param accessKeyId
           * @param accessKeySecret
           * @param endpoint
           * @return
           * @throws Exception
           */
          public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              Config config = new Config();
              config.setAccessKeyId(accessKeyId);
              config.setAccessKeySecret(accessKeySecret);
              // 接入区域和地址请根据实际情况修改
              config.setEndpoint(endpoint);
              return new Client(config);
          }
      
          /**
           * 创建上传文件请求客户端
           *
           * @param tokenData
           * @param isVPC
           */
          public static void getOssClient(DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData, boolean isVPC) {
              //注意,此处实例化的client请尽可能重复使用,避免重复建立连接,提升检测性能。
              if (isVPC) {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternalEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              } else {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternetEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              }
          }
      
          /**
           * 上传文件
           *
           * @param filePath
           * @param tokenData
           * @return
           * @throws Exception
           */
          public static String uploadFile(String filePath, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData) throws Exception {
              String[] split = filePath.split("\\.");
              String objectName;
              if (split.length > 1) {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID() + "." + split[split.length - 1];
              } else {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID();
              }
              PutObjectRequest putObjectRequest = new PutObjectRequest(tokenData.getBucketName(), objectName, new File(filePath));
              ossClient.putObject(putObjectRequest);
              return objectName;
          }
      
          public static FileModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              //注意,此处实例化的client请尽可能重复使用,避免重复建立连接,提升检测性能。
              Client client = createClient(accessKeyId, accessKeySecret, endpoint);
              RuntimeOptions runtime = new RuntimeOptions();
      
              //本地文件的完整路径,例如D:\localPath\exampleFile.mp3。
              String filePath = "D:/test/1.pdf";
              //获取文件上传token
              if (tokenMap.get(endpoint) == null || tokenMap.get(endpoint).expiration <= System.currentTimeMillis() / 1000) {
                  DescribeUploadTokenResponse tokenResponse = client.describeUploadToken();
                  tokenMap.put(endpoint, tokenResponse.getBody().getData());
              }
              //上传文件请求客户端
              getOssClient(tokenMap.get(endpoint), isVPC);
      
              //上传文件
              String objectName = uploadFile(filePath, tokenMap.get(endpoint));
      
              // 检测参数构造。
              Map<String, String> serviceParameters = new HashMap<>();
              //文件上传信息
              serviceParameters.put("ossBucketName", tokenMap.get(endpoint).getBucketName());
              serviceParameters.put("ossObjectName", objectName);
              serviceParameters.put("dataId", UUID.randomUUID().toString());
      
              FileModerationRequest request = new FileModerationRequest();
              // 检测类型。
              request.setService("document_detection_global");
              request.setServiceParameters(JSON.toJSONString(serviceParameters));
      
              FileModerationResponse response = null;
              try {
                  response = client.fileModerationWithOptions(request, runtime);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return response;
          }
      
          public static void main(String[] args) throws Exception {
              /**
               * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
               * 常见获取环境变量方式:
               * 方式一:
               *     获取RAM用户AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     获取RAM用户AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     获取RAM用户AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     获取RAM用户AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建议从环境变量中获取RAM用户AccessKey ID");
              config.setAccessKeySecret("建议从环境变量中获取RAM用户AccessKey Secret");
              // 接入区域和地址请根据实际情况修改。
              FileModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com");
      
                  // 打印检测结果。
                  if (response != null) {
                      if (response.getStatusCode() == 200) {
                          FileModerationResponseBody body = response.getBody();
                          System.out.println(JSON.toJSONString(body));
                          System.out.println("requestId = " + body.getRequestId());
                          System.out.println("code = " + body.getCode());
                          System.out.println("msg = " + body.getMessage());
                          Integer code = body.getCode();
                          if (200 == code) {
                              FileModerationResponseBody.FileModerationResponseBodyData data = body.getData();
                              System.out.println("taskId = [" + data.getTaskId() + "]");
                          } else {
                              System.out.println("file moderation not success. code:" + code);
                          }
                      } else {
                          System.out.println("response not success. status:" + response.getStatusCode());
                      }
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
      
    • 获取文档检测任务代码示例

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.DescribeFileModerationResultRequest;
      import com.aliyun.green20220302.models.DescribeFileModerationResultResponse;
      import com.aliyun.green20220302.models.DescribeFileModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class DescribeFileModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
               * 常见获取环境变量方式:
               * 方式一:
               *     获取RAM用户AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     获取RAM用户AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     获取RAM用户AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     获取RAM用户AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建议从环境变量中获取RAM用户AccessKey ID");
              config.setAccessKeySecret("建议从环境变量中获取RAM用户AccessKey Secret");
              //接入区域和地址请根据实际情况修改
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //连接时超时时间,单位毫秒(ms)。
              config.setReadTimeout(6000);
              //读取时超时时间,单位毫秒(ms)。
              config.setConnectTimeout(3000);
            
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // 提交任务时返回的taskId
              serviceParameters.put("taskId", "fi_f_O5z5i*********-1xxp0V");
      
      
              DescribeFileModerationResultRequest describeFileModerationResultRequest = new DescribeFileModerationResultRequest();
              
              describeFileModerationResultRequest.setService("document_detection_global");
              describeFileModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  DescribeFileModerationResultResponse response = client.describeFileModerationResult(describeFileModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      DescribeFileModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          DescribeFileModerationResultResponseBody.DescribeFileModerationResultResponseBodyData data = result.getData();
                          System.out.println("pageResult = " + JSON.toJSONString(data.getPageResult()));
                          System.out.println("dataId = " + data.getDataId());
                          System.out.println("url = " + data.getUrl());
                      } else {
                          System.out.println("file moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

对OSS文档进行检测

使用场景

如果您需要审核的文档文件已经存储在阿里云对象存储OSS中,您可授权创建服务角色,允许内容安全服务访问对象存储OSS。文档审核2.0版服务会通过服务角色获取到对象存储OSS的文件后进行审核。访问云资源访问授权页面创建服务角色。

  1. dependencies中添加如下依赖:

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>3.0.1</version>
    </dependency>

    安装OSS SDK:

    <dependency>
      <groupId>com.aliyun.oss</groupId>
      <artifactId>aliyun-sdk-oss</artifactId>
      <version>3.16.3</version>
    </dependency>
  2. 接入Java SDK。

    • 提交文档检测任务代码示例

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.FileModerationRequest; 
      import com.aliyun.green20220302.models.FileModerationResponse; 
      import com.aliyun.green20220302.models.FileModerationResponseBody; 
      import com.aliyun.teaopenapi.models.Config;
      
      public class FileModerationDemo {
          public static void main(String[] args) throws Exception {
              Config config = new Config();
               /**
               * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
               * 常见获取环境变量方式:
               * 方式一:
               *     获取RAM用户AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     获取RAM用户AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     获取RAM用户AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     获取RAM用户AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建议从环境变量中获取RAM用户AccessKey ID");
              config.setAccessKeySecret("建议从环境变量中获取RAM用户AccessKey Secret");
              //接入区域和地址请根据实际情况修改。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //连接时超时时间,单位毫秒(ms)。
              config.setReadTimeout(6000);
              //读取时超时时间,单位毫秒(ms)。
              config.setConnectTimeout(3000);
      
              Client client = new Client(config);
              JSONObject serviceParameters = new JSONObject();
              serviceParameters.put("ossBucketName", "bucket_01");
              serviceParameters.put("ossObjectName", "2022023/04/24/test.pdf");
              serviceParameters.put("ossRegionId", "ap-southeast-1"); 
      
              FileModerationRequest fileModerationRequest = new FileModerationRequest(); 
              // 检测类型:document_detection 通用文档检测
              fileModerationRequest.setService("document_detection_global");
              fileModerationRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  FileModerationResponse response = client.fileModeration(fileModerationRequest); 
                  if (response.getStatusCode() == 200) {
                      FileModerationResponseBody result = response.getBody(); 
                      System.out.println(JSON.toJSONString(result));
                      System.out.println("requestId = " + result.getRequestId());
                      System.out.println("code = " + result.getCode());
                      System.out.println("msg = " + result.getMessage());
                      Integer code = result.getCode();
                      if (200 == code) {
                          FileModerationResponseBody.FileModerationResponseBodyData data = result.getData();
                          System.out.println("taskId = [" + data.getTaskId() + "]");
                      } else {
                          System.out.println("file moderation not success. code:" + code);
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
      
    • 获取文档检测任务代码示例

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.DescribeFileModerationResultRequest;
      import com.aliyun.green20220302.models.DescribeFileModerationResultResponse;
      import com.aliyun.green20220302.models.DescribeFileModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class DescribeFileModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
               * 常见获取环境变量方式:
               * 方式一:
               *     获取RAM用户AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     获取RAM用户AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方式二:
               *     获取RAM用户AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     获取RAM用户AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("建议从环境变量中获取RAM用户AccessKey ID");
              config.setAccessKeySecret("建议从环境变量中获取RAM用户AccessKey Secret");
              //接入区域和地址请根据实际情况修改
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //连接时超时时间,单位毫秒(ms)。
              config.setReadTimeout(6000);
              //读取时超时时间,单位毫秒(ms)。
              config.setConnectTimeout(3000);
            
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // 提交任务时返回的taskId
              serviceParameters.put("taskId", "fi_f_O5z5i*********-1xxp0V");
      
      
              DescribeFileModerationResultRequest describeFileModerationResultRequest = new DescribeFileModerationResultRequest();
              
              describeFileModerationResultRequest.setService("document_detection_global");
              describeFileModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  DescribeFileModerationResultResponse response = client.describeFileModerationResult(describeFileModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      DescribeFileModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          DescribeFileModerationResultResponseBody.DescribeFileModerationResultResponseBodyData data = result.getData();
                          System.out.println("pageResult = " + JSON.toJSONString(data.getPageResult()));
                          System.out.println("dataId = " + data.getDataId());
                          System.out.println("url = " + data.getUrl());
                      } else {
                          System.out.println("file moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

Python SDK

支持Python 3.6及以上版本。

原始代码,请参见Python SDK源码

支持以下三种类型的文档检测。

对公网可访问文档进行检测

使用场景

当需要审核的文档可通过公网链接访问时,文档审核2.0版服务可通过文档URL获取文件后进行审核。

  1. 执行如下命令安装pip。

    pip install alibabacloud_green20220302==3.0.1

  2. 接入Python SDK。

    • 提交文档检测任务代码示例

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
          # 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
          # 常见获取环境变量方式:
          # 获取RAM用户AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # 获取RAM用户AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='建议从环境变量中获取RAM用户AccessKey ID',
          access_key_secret='建议从环境变量中获取RAM用户AccessKey Secret',
          # 连接超时时间 单位毫秒(ms)
          connect_timeout=10000, 
          # 读超时时间 单位毫秒(ms) 
          read_timeout=3000,  
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      serviceParameters = {
          'url': 'https://detect-obj.oss-cn-hangzhou.aliyuncs.com/sample/xxxx.pdf',
      }
      fileModerationRequest = models.FileModerationRequest(
          # 检测类型
          service='document_detection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.file_moderation(fileModerationRequest)
          if response.status_code == 200:
              # 调用成功
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • 获取文档检测任务结果

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
          # 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
          # 常见获取环境变量方式:
          # 获取RAM用户AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # 获取RAM用户AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='建议从环境变量中获取RAM用户AccessKey ID',
          access_key_secret='建议从环境变量中获取RAM用户AccessKey Secret',
          # 连接超时时间 单位毫秒(ms)
          connect_timeout=10000, 
          # 读超时时间 单位毫秒(ms) 
          read_timeout=3000,  
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # 提交任务时返回的taskId
      serviceParameters = {
          "taskId": 'fi_f_11w5THcb*******a-1xx7hH'
      }
      describeFileModerationResultRequest = models.DescribeFileModerationResultRequest(
          # 检测类型
          service='document_detection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.describe_file_moderation_result(describeFileModerationResultRequest)
          if response.status_code == 200:
              # 调用成功
              # 获取审核结果
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

对本地文档进行检测

使用场景

当您需要审核的文档在本地机器且无公网访问链接,您可以将文档上传到内容安全提供的对象存储OSS Bucket中,文档审核2.0版服务可直接访问对象存储OSS,获取到文档内容后进行审核。

  1. 执行如下命令安装pip。

    pip install alibabacloud_green20220302==3.0.1

    安装OSS SDK:

    pip install oss2
  2. 接入Python SDK。

    • 提交文档检测任务代码示例

      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      from alibabacloud_tea_util.client import Client as UtilClient
      from alibabacloud_tea_util import models as util_models
      import json
      import uuid
      
      import oss2
      import time
      
      configs = Config(
          # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
          # 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
          # 常见获取环境变量方式:
          # 获取RAM用户AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # 获取RAM用户AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='建议从环境变量中获取RAM用户AccessKey ID',
          access_key_secret='建议从环境变量中获取RAM用户AccessKey Secret',
          # 连接时超时时间,单位毫秒(ms)。
          connect_timeout=10000,
          # 读取时超时时间,单位毫秒(ms)。
          read_timeout=10000,
          # 接入区域和地址请根据实际情况修改。
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      # 注意:此处实例化的client请尽可能重复使用,避免重复建立连接,提升检测性能。
      client = Client(configs)
      
      bucket = None
      upload_token = None
      
      
      def get_oss_client(is_vpc):
          global upload_token
          global bucket
          if (upload_token == None) or int(upload_token.expiration) <= int(time.time()):
              response = client.describe_upload_token()
      
              upload_token = response.body.data
              auth = oss2.StsAuth(upload_token.access_key_id, upload_token.access_key_secret, upload_token.security_token)
      
              end_point = upload_token.oss_internet_end_point
              if (is_vpc):
                  end_point = upload_token.oss_internal_end_point
              bucket = oss2.Bucket(auth, end_point, upload_token.bucket_name)
      
      
      def upload_file(file_name, is_vpc):
          get_oss_client(is_vpc)
          object_name = upload_token.file_name_prefix + str(uuid.uuid4()) + '.' + file_name.split('.')[-1]
          bucket.put_object_from_file(object_name, file_name)
          return object_name
      
      
      def file_moderation_by_local_file(file_path, is_vpc):
          # 1. 上传文件
          object_name = upload_file(file_path, is_vpc)
      
          # 2. 检测参数
          service_parameters = {
              'dataId': str(uuid.uuid4()),
              'ossBucketName': upload_token.bucket_name,
              'ossObjectName': object_name
          }
      
          file_moderation_request = models.FileModerationRequest(
              # 检测类型。
              service='document_detection_global',
              service_parameters=json.dumps(service_parameters)
          )
      
          # 创建RuntimeObject实例并设置运行参数。
          runtime = util_models.RuntimeOptions()
          runtime.read_timeout = 10000
          runtime.connect_timeout = 10000
          try:
              global client
              response = client.file_moderation_with_options(file_moderation_request, runtime)
      
              if response.status_code == 200:
                  # 调用成功。
                  # 获取审核结果。
                  result = response.body
                  print('response success. result:{}'.format(result))
                  if result.code == 200:
                      result_data = result.data
                      print('result: {}'.format(result_data))
              else:
                  print('response not success. status:{} ,result:{}'.format(response.status_code, response))
          except Exception as err:
              print(err)
      
      
      if __name__ == '__main__':
          # 本地文件路径
          file_path = '/Users/test/MS.pdf'
          # 是否在VPC上部署
          is_vpc = False  # True
          file_moderation_by_local_file(file_path, is_vpc)
           
    • 获取文档检测任务结果

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
          # 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
          # 常见获取环境变量方式:
          # 获取RAM用户AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # 获取RAM用户AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='建议从环境变量中获取RAM用户AccessKey ID',
          access_key_secret='建议从环境变量中获取RAM用户AccessKey Secret',
          # 连接超时时间 单位毫秒(ms)
          connect_timeout=10000, 
          # 读超时时间 单位毫秒(ms) 
          read_timeout=3000,  
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # 提交任务时返回的taskId
      serviceParameters = {
          "taskId": 'fi_f_11w5THcb*******a-1xx7hH'
      }
      describeFileModerationResultRequest = models.DescribeFileModerationResultRequest(
          # 检测类型
          service='document_detection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.describe_file_moderation_result(describeFileModerationResultRequest)
          if response.status_code == 200:
              # 调用成功
              # 获取审核结果
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

对OSS文档进行检测

使用场景

如果您需要审核的文档文件已经存储在阿里云对象存储OSS中,您可授权创建服务角色,允许内容安全服务访问对象存储OSS。文档审核2.0版服务会通过服务角色获取到对象存储OSS的文件后进行审核。访问云资源访问授权页面创建服务角色。

  1. 执行如下命令安装pip。

    pip install alibabacloud_green20220302==3.0.1
  2. 接入Python SDK。

    • 提交文档检测任务代码示例

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
          # 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
          # 常见获取环境变量方式:
          # 获取RAM用户AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # 获取RAM用户AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='建议从环境变量中获取RAM用户AccessKey ID',
          access_key_secret='建议从环境变量中获取RAM用户AccessKey Secret',
          # 连接超时时间 单位毫秒(ms)
          connect_timeout=10000,
          # 读超时时间 单位毫秒(ms)
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      serviceParameters = {
          'ossRegionId': 'cn-hangzhou',
          'ossBucketName': 'detect-obj',
          'ossObjectName': 'sample/xxxx.pdf'
      }
      fileModerationRequest = models.FileModerationRequest(
          # 检测类型
          service='document_detection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.file_moderation(fileModerationRequest)
          if response.status_code == 200:
              # 调用成功
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
          
    • 获取文档检测任务结果

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
          # 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
          # 常见获取环境变量方式:
          # 获取RAM用户AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # 获取RAM用户AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='建议从环境变量中获取RAM用户AccessKey ID',
          access_key_secret='建议从环境变量中获取RAM用户AccessKey Secret',
          # 连接超时时间 单位毫秒(ms)
          connect_timeout=10000, 
          # 读超时时间 单位毫秒(ms) 
          read_timeout=3000,  
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # 提交任务时返回的taskId
      serviceParameters = {
          "taskId": 'fi_f_11w5THcb*******a-1xx7hH'
      }
      describeFileModerationResultRequest = models.DescribeFileModerationResultRequest(
          # 检测类型
          service='document_detection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.describe_file_moderation_result(describeFileModerationResultRequest)
          if response.status_code == 200:
              # 调用成功
              # 获取审核结果
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

PHP SDK

支持PHP 5.6及以上版本。

原始代码,请参见PHP SDK源码

支持以下三种类型的文档检测。

对公网可访问文档进行检测

使用场景

当需要审核的文档可通过公网链接访问时,文档审核2.0版服务可通过文档URL获取文件后进行审核。

  1. 执行如下命令引入相关依赖。

    composer require alibabacloud/green-20220302 3.0.1

  2. 接入PHP SDK。

    • 提交文档检测任务代码示例

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\FileModerationRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
           * 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
           * 常见获取环境变量方式:
           * 获取RAM用户AccessKey ID:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * 获取RAM用户AccessKey Secret:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '建议从环境变量中获取RAM用户AccessKey ID',
          "accessKeySecret" => '建议从环境变量中获取RAM用户AccessKey Secret',
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意,此处实例化的client请尽可能重复使用,避免重复建立连接,提升检测性能。
      $client = new Green($config);
      
      $request = new FileModerationRequest();
      $request->service = "document_detection_global";
      $serviceParameters = array("url" => "https://xxx.oss.aliyuncs.com/xxx.pdf");
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->fileModerationWithOptions($request, $runtime);
          print_r($response->body);
          if (200 != $response->statusCode) {
              print_r("response not success. code:" . $response->statusCode);
              return;
          }
          $body = $response->body;
          print_r("requestId = " . $body->requestId . "\n");
          print_r("code = " . $body->code . "\n");
          print_r("message = " . $body->message . "\n");
          if (200 != $body->code) {
              print_r("file moderation not success. code:" . $body->code);
          }
          $data = $body->data;
          print_r("taskId = " . $data->taskId);
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • 获取文档检测任务结果

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\DescribeFileModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
           * 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
           * 常见获取环境变量方式:
           * 获取RAM用户AccessKey ID:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * 获取RAM用户AccessKey Secret:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '建议从环境变量中获取RAM用户AccessKey ID',
          "accessKeySecret" => '建议从环境变量中获取RAM用户AccessKey Secret',
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意,此处实例化的client请尽可能重复使用,避免重复建立连接,提升检测性能。
      $client = new Green($config);
      
      $request = new DescribeFileModerationResultRequest();
      $request->service = "document_detection_global";
      $serviceParameters = array("taskId" => "fi_f_O5z5iaIis*****NYj7qa-1x****");
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->describeFileModerationResultWithOptions($request, $runtime);
          if (200 != $response->statusCode) {
              print_r("response not success. code:" . $response->statusCode);
              return;
          }
          $body = $response->body;
          print_r("requestId = " . $body->requestId . "\n");
          print_r("code = " . $body->code . "\n");
          print_r("message = " . $body->message . "\n");
          if (280 == $body->code) {
              print_r("processing file moderation. code:" . $body->code);
              return;
          }
          if (200 != $body->code) {
              print_r("file moderation result not success. code:" . $body->code);
              return;
          }
          $data = $body->data;
            print_r("data = " . json_encode($data) . "\n");
          print_r("pageResult = " . json_encode($data->pageResult) . "\n");
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }

对本地文档进行检测

使用场景

当您需要审核的文档在本地机器且无公网访问链接,您可以将文档上传到内容安全提供的对象存储OSS Bucket中,文档审核2.0版服务可直接访问对象存储OSS,获取到文档内容后进行审核。

  1. 执行如下命令引入相关依赖。

    composer require alibabacloud/green-20220302 3.0.1

    安装OSS SDK:

    composer require aliyuncs/oss-sdk-php
  2. 接入PHP SDK。

    • 提交文档检测任务代码示例

    • 获取文档检测任务结果

对OSS文档进行检测

使用场景

如果您需要审核的文档文件已经存储在阿里云对象存储OSS中,您可授权创建服务角色,允许内容安全服务访问对象存储OSS。文档审核2.0版服务会通过服务角色获取到对象存储OSS的文件后进行审核。访问云资源访问授权页面创建服务角色。

  1. 执行如下命令引入相关依赖。

    composer require alibabacloud/green-20220302 3.0.1
  2. 接入PHP SDK。

    • 提交文档检测任务代码示例

    • 获取文档检测任务结果

Go SDK

支持以下三种类型的文档检测。

对公网可访问文档进行检测

使用场景

当需要审核的文档可通过公网链接访问时,文档审核2.0版服务可通过文档URL获取文件后进行审核。

Go SDK

  1. 执行如下命令引入相关依赖。

    go get github.com/alibabacloud-go/green-20220302/v3

  2. 接入Go SDK。

    • 提交文档检测任务代码示例

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的STS方式。
          config := &openapi.Config{
              /**
               * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
               * 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
               * 常见获取环境变量方式:
               * 获取RAM用户AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * 获取RAM用户AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("建议从环境变量中获取RAM用户AccessKey ID"),
              AccessKeySecret: tea.String("建议从环境变量中获取RAM用户AccessKey Secret"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
           * 请设置超时时间。服务端全链路处理超时时间为10秒,请做相应设置。
           * 如果您设置的ReadTimeout小于服务端处理的时间,程序中会获得一个ReadTimeout异常。
           */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          client, _err := green20220302.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          // 创建RuntimeObject实例并设置运行参数。
          runtime := &util.RuntimeOptions{}
          runtime.ReadTimeout = tea.Int(10000)
          runtime.ConnectTimeout = tea.Int(10000)
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "url": "https://xxx.oss.aliyuncs.com/xxx.pdf",
              },
          )
          request := green20220302.FileModerationRequest{
              Service:           tea.String("document_detection_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.FileModerationWithOptions(&request, runtime)
          if _err != nil {
              panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
              fmt.Printf("response not success. status:%d\n", *result.StatusCode)
              return
          }
          body := result.Body
          fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message)
          if *body.Code != http.StatusOK {
              fmt.Printf("file moderation not success. code:%d\n", *body.Code)
              return
          }
          
          data := body.Data
          fmt.Printf("file moderation taskId:%s\n", *data.TaskId)
      }
    • 获取文档检测任务结果

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的STS方式。
          config := &openapi.Config{
              /**
               * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
               * 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
               * 常见获取环境变量方式:
               * 获取RAM用户AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * 获取RAM用户AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("建议从环境变量中获取RAM用户AccessKey ID"),
              AccessKeySecret: tea.String("建议从环境变量中获取RAM用户AccessKey Secret"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
           * 请设置超时时间。服务端全链路处理超时时间为10秒,请做相应设置。
           * 如果您设置的ReadTimeout小于服务端处理的时间,程序中会获得一个ReadTimeout异常。
           */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          client, _err := green20220302.NewClient(config)
          if _err != nil {
          panic(_err)
          }
      
          // 创建RuntimeObject实例并设置运行参数。
          runtime := &util.RuntimeOptions{}
          runtime.ReadTimeout = tea.Int(10000)
          runtime.ConnectTimeout = tea.Int(10000)
      
          serviceParameters, _ := json.Marshal(
          map[string]interface{}{
          "taskId": "fi_f_O5z5iaIi******-1x****",
          },
          )
          request := green20220302.DescribeFileModerationResultRequest{
          Service:           tea.String("document_detection_global"),
          ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.DescribeFileModerationResultWithOptions(&request, runtime)
          if _err != nil {
          panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
          fmt.Printf("response not success. status:%d\n", *result.StatusCode)
          return
          }
          body := result.Body
          fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message)
          if *body.Code == 280 {
          fmt.Printf("processing file moderation. code:%d\n", *body.Code)
          return
          }
          if *body.Code != http.StatusOK {
          fmt.Printf("file moderation result not success. code:%d\n", *body.Code)
          return
          }
      
          data := body.Data
          fmt.Printf("file moderation result:%s\n", data)
          fmt.Printf("file moderation result pageResult:%s\n", data.PageResult)
          fmt.Printf("file moderation result dataId:%s\n", data.DataId)
      }

对本地文档进行检测

使用场景

当您需要审核的文档在本地机器且无公网访问链接,您可以将文档上传到内容安全提供的对象存储OSS Bucket中,文档审核2.0版服务可直接访问对象存储OSS,获取到文档内容后进行审核。

  1. 执行如下命令引入相关依赖。

    go get github.com/alibabacloud-go/green-20220302/v3

    安装OSS SDK:

    go get github.com/aliyun/aliyun-oss-go-sdk/oss
  2. 接入Go SDK。

    • 提交文档检测任务代码示例

    • 获取文档检测任务结果

对OSS文档进行检测

使用场景

如果您需要审核的文档文件已经存储在阿里云对象存储OSS中,您可授权创建服务角色,允许内容安全服务访问对象存储OSS。文档审核2.0版服务会通过服务角色获取到对象存储OSS的文件后进行审核。访问云资源访问授权页面创建服务角色。

  1. 执行如下命令引入相关依赖。

    go get github.com/alibabacloud-go/green-20220302/v3

  2. 接入Go SDK。

    • 提交文档检测任务代码示例

    • 获取文档检测任务结果

Node.js SDK

原始代码,请参见Node.js SDK源码

支持以下三种类型的文档检测。

对公网可访问文档进行检测

使用场景

当需要审核的文档可通过公网链接访问时,文档审核2.0版服务可通过文档URL获取文件后进行审核。

  1. 执行如下命令引入相关依赖。

    npm install @alicloud/green20220302@3.0.1
  2. 接入Node.js SDK。

    • 提交文档检测任务代码示例

      获取文档检测任务结果代码示例

对本地文档进行检测

使用场景

当您需要审核的文档在本地机器且无公网访问链接,您可以将文档上传到内容安全提供的对象存储OSS Bucket中,文档审核2.0版服务可直接访问对象存储OSS,获取到文档内容后进行审核。

  1. 执行如下命令引入相关依赖。

    npm install @alicloud/green20220302@3.0.1

    安装OSS SDK:

    npm install ali-oss --save
  2. 接入Node.js SDK。

    • 提交文档检测任务代码示例

      获取文档检测任务结果代码示例

对OSS文档进行检测

使用场景

如果您需要审核的文档文件已经存储在阿里云对象存储OSS中,您可授权创建服务角色,允许内容安全服务访问对象存储OSS。文档审核2.0版服务会通过服务角色获取到对象存储OSS的文件后进行审核。访问云资源访问授权页面创建服务角色。

  1. 执行如下命令引入相关依赖。

    npm install @alicloud/green20220302@3.0.1
  2. 接入Node.js SDK。

    • 提交文档检测任务代码示例

      获取文档检测任务结果代码示例

C# SDK

原始代码,请参见C# SDK源码

支持以下三种类型的文档检测。

对公网可访问文档进行检测

使用场景

当需要审核的文档可通过公网链接访问时,文档审核2.0版服务可通过文档URL获取文件后进行审核。

  1. 执行如下命令引入相关依赖。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 3.0.1
  2. 接入C# SDK。

    • 提交文档检测任务代码示例

    • 获取文档检测任务结果代码示例

对本地文档进行检测

使用场景

当您需要审核的文档在本地机器且无公网访问链接,您可以将文档上传到内容安全提供的对象存储OSS Bucket中,文档审核2.0版服务可直接访问对象存储OSS,获取到文档内容后进行审核。

  1. 执行如下命令引入相关依赖。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 3.0.1

    安装OSS SDK:

    NuGet方式安装 
    1.如果您的Visual Studio没有安装NuGet,请先安装NuGet。
    2.在Visual Studio中新建或者打开已有的项目,选择工具 > NuGet程序包管理器 > 管理解决方案的NuGet程序包。
    3.搜索aliyun.oss.sdk,在结果中找到Aliyun.OSS.SDK(适用于.NET Framework)或Aliyun.OSS.SDK.NetCore(适用于.Net Core),选择最新版本,单击安装。
  2. 接入C# SDK。

    • 提交文档检测任务代码示例

    • 获取文档检测任务结果代码示例

对OSS文档进行检测

使用场景

如果您需要审核的文档文件已经存储在阿里云对象存储OSS中,您可授权创建服务角色,允许内容安全服务访问对象存储OSS。文档审核2.0版服务会通过服务角色获取到对象存储OSS的文件后进行审核。访问云资源访问授权页面创建服务角色。

  1. 执行如下命令引入相关依赖。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 3.0.1
  2. 接入C# SDK。

    • 提交文档检测任务代码示例

    • 获取文档检测任务结果代码示例

HTTPS原生调用

  • 调用方式

    服务请求地址:https://green-cip.{region}.aliyuncs.com

    协议:HTTPS

    方式:POST

  • 公共请求参数

    文档审核增强版API接口的入参数包含公共请求参数和具体接口请求参数,公共请求参数是指每一个接口都需要使用到的参数,以下表格是公共请求参数的详细介绍。

    名称

    类型

    是否必须

    描述

    Format

    String

    返回消息的格式。取值:

    • JSON(默认值)

    • XML

    Version

    String

    API版本号,使用YYYY-MM-DD日期格式,本版本为2022-03-02。

    AccessKeyId

    String

    阿里云颁发给用户的访问服务所用的密钥ID。

    Signature

    String

    签名结果串,关于签名的计算方法,请参见下方签名方式。

    SignatureMethod

    String

    签名方式,目前支持HMAC-SHA1。

    Timestamp

    String

    请求的时间戳。日期格式按照ISO8601标准表示,并需要使用UTC时间。

    格式为:yyyy-MM-ddTHH:mm:ssZ。

    例如,北京时间2022年12月12日09点13分14秒表示为2022-12-12T01:13:14Z。

    SignatureVersion

    String

    签名算法版本,取值为1.0。

    SignatureNonce

    String

    唯一随机数,用于防止网络重放攻击。不同请求要使用不同的随机数值。

    Action

    String

    取值:

    • FileModeration

    • DescribeFileModerationResult

  • 公共返回参数

    您发送的每次接口调用请求,无论成功与否,系统都会返回唯一识别码(RequestId)。其他返回参数会根据您调用的服务不同而返回不同的参数。

    {
        "Msg": "OK",
        "Code": 200,
        "Data":
        {
            "TaskId": "AAAAA-BBBBB-CCCCCCCC"
        },
        "RequestId": "ABCD1234-1234-1234-1234-123****"
    }
  • 代码示例

    以下返回示例为了便于阅读,做了格式化处理,实际返回结果没有进行换行、缩进等格式化处理。

    • 审核任务代码示例

      请求示例

      正常返回示例

      {
          "Msg": "OK",
          "Code": 200,
          "Data":
          {
              "TaskId": "AAAAA-BBBBB-CCCCCCCC"
          },
          "RequestId": "ABCD1234-1234-1234-1234-123****"
      }
    • 查询任务代码示例

      请求示例

      正常返回示例

      {
          "Code": 200,
          "Data": {
              "DataId": "fileId*****",
              "PageResult": [
                  {
                      "ImageResult": [
                          {
                              "Description": "对文档页面的图像内容审核",
                              "LabelResult": [
                                  {
                                      "label": "nonLabel"
                                  }
                              ],
                              "Service": "baselineCheck"
                          }
                      ],
                      "ImageUrl": "http://oss.aliyundoc.com/a.png",
                      "PageNum": 1,
                      "TextResult": [
                          {
                              "Description": "对文档页面的文字内容审核",
                              "Labels": "",
                              "RiskTips": "",
                              "RiskWords": "",
                              "Service": "pgc_detection",
                              "Text": "内容安全产品测试用例a"
                          }
                      ]
                  },
                  ...
                  {
                      "ImageResult": [
                          {
                              "Description": "对文档页面的图像内容审核",
                              "LabelResult": [
                                  {
                                      "Confidence": 89.01,
                                      "Label": "pornographic_adultContent_tii"
                                  }
                              ],
                              "Service": "baselineCheck"
                          }
                      ],
                      "ImageUrl": "http://oss.aliyundoc.com/b.png",
                      "PageNum": 10,
                      "TextResult": [
                          {
                              "Description": "对文档页面的文字内容审核",
                              "Labels": "contraband,sexual_content",
                              "RiskTips": "违禁_违禁商品,色情_影视资源,色情_低俗",
                              "RiskWords": "风险词A,风险词B",
                              "Service": "ad_compliance_detection",
                              "Text": "内容安全产品测试用例b"
                          }
                      ]
                  }
              ],
              "Url": "http://www.aliyundoc.com/a.docx"
          },
          "Message": "SUCCESS",
          "RequestId": "1D0854A7-AAAAA-BBBBBBB-CC8292AE5"
      }
  • 签名方式

    文档审核增强版服务会对每个访问的请求进行身份验证,因此,需要在请求中包含签名(Signature)信息。文档审核增强版服务通过使用AccessKey ID和AccessKey Secret进行对称加密的方法来验证请求的发送者身份。

    AccessKey ID和AccessKey Secret由阿里云官方颁发给访问者(可以通过阿里云官方网站申请和管理),其中AccessKey ID用于标识访问者身份;AccessKey Secret是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密,只有阿里云和用户知道。

    用户在访问时,按照下面的方法对请求进行签名处理:

    1. 使用请求参数构造规范化的请求字符串(Canonicalized Query String)。

      1. 按照参数名称的字典顺序对请求中所有的请求参数(包括公共请求参数和给定了的请求接口的自定义参数,但不能包括公共请求参数中提到的Signature参数本身)进行排序。

      2. 对相关请求参数的名称和值进行编码。名称和值要使用UTF-8字符集进行URL编码。

        说明

        一般支持URL编码的库(比如Java中的java.net.URLEncoder)都是按照application/x-www-form-urlencoded的MIME类型的规则进行编码的。实现时可以直接使用这类方式进行编码,把编码后的字符串中加号(+)替换成%20、星号(*)替换成%2A、%7E替换回波浪号(~),即可得到上述规则描述的编码字符串。

        URL编码的编码规则如下:

        • 对于字符A-Z、a-z、0-9以及字符中划线(-)、下划线(_)、半角句号(.)、波浪线(~)不编码。

        • 对于其它字符编码成%XY的格式,其中XY是字符对应ASCII码的16进制表示。比如英文的双引号(")对应的编码就是%22

        • 对于扩展的UTF-8字符,编码成%XY%ZA…的格式。

        • 需要说明的是英文空格( )要被编码是%20,而不是加号(+)。

      3. 对编码后的参数名称和值使用英文等号(=)进行连接。

      4. 将英文等号连接得到字符串按参数名称的字典顺序依次使用&符号连接,即得到规范化请求字符串。

    2. 使用 a.i 构造的规范化字符串按照下面的规则构造用于计算签名的字符串:

      StringToSign=
      HTTPMethod + "&" +
      percentEncode("/") + "&" +
      percentEncode(CanonicalizedQueryString)
      说明

      其中HTTPMethod是提交请求用的HTTP方法,比如POST。percentEncode(/)是按照 a.ii 中描述的URL编码规则对字符(/)进行编码得到的值,即%2F。percentEncode(CanonicalQueryString)是对 a.i 中构造的规范化请求字符串按 a.ii 中描述的URL编码规则编码后得到的字符串。

    3. 按照RFC2104的定义,使用上面的用于签名的字符串计算签名HMAC值。

      说明

      注意计算签名时使用的Key就是用户持有的AccessKey Secret并加上一个&字符(ASCII:38),使用的哈希算法是SHA1。

    4. 按照Base64编码规则把上面的HMAC值编码成字符串,即得到签名值(Signature)。

    5. 将得到的签名值作为Signature参数添加到请求参数中,即完成对请求签名的过程。

      说明

      得到的签名值在作为最后的请求参数值提交给内容安全服务器时,要和其他参数一样,按照RFC3986的规则进行URL编码。