当前位置: 首页 > article >正文

腾讯云使用

注:本文的所有演示的代码都基于尚硅谷的尚乐代驾项目

对象存储COS

一种云存储器

官方文档:

对象存储 快速入门-SDK 文档-文档中心-腾讯云 (tencent.com)

一  上传文件

1  初始化客户端

官方示例:

// 1 传入获取到的临时密钥 (tmpSecretId, tmpSecretKey, sessionToken)
String tmpSecretId = "SECRETID";
String tmpSecretKey = "SECRETKEY";
String sessionToken = "TOKEN";
BasicSessionCredentials cred = new BasicSessionCredentials(tmpSecretId, tmpSecretKey, sessionToken);
// 2 设置 bucket 的地域
// clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分
Region region = new Region("COS_REGION"); //COS_REGION 参数:配置成存储桶 bucket 的实际地域,例如 ap-beijing,更多 COS 地域的简称请参见 https://cloud.tencent.com/document/product/436/6224
ClientConfig clientConfig = new ClientConfig(region);
// 3 生成 cos 客户端
COSClient cosClient = new COSClient(cred, clientConfig);

自己实际用的。尚硅谷的乐尚代驾内的内容。这里面要自己定义一个配置类,将腾讯云存储的相关的属性写到yml文件中,然后用配置类读取。这里没用到token

// 1 初始化用户身份信息(secretId, secretKey)。
        String secretId = tencentCloudProperties.getSecretId();
        String secretKey = tencentCloudProperties.getSecretKey();
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
        // 2 设置 bucket 的地域, COS 地域
        Region region = new Region(tencentCloudProperties.getRegion());
        ClientConfig clientConfig = new ClientConfig(region);
        // 这里建议设置使用 https 协议
        clientConfig.setHttpProtocol(HttpProtocol.https);
        // 3 生成 cos 客户端。
        COSClient cosClient = new COSClient(cred, clientConfig);

2  上传文件

官方示例:

// 指定要上传的文件
File localFile = new File(localFilePath);
// 指定文件将要存放的存储桶
String bucketName = "examplebucket-1250000000";
// 指定文件上传到 COS 上的路径,即对象键。例如对象键为 folder/picture.jpg,则表示将文件 picture.jpg 上传到 folder 路径下
String key = "folder/picture.jpg";
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);

自己修改的

//文件上传
        //元数据信息
        ObjectMetadata meta = new ObjectMetadata();
        meta.setContentLength(file.getSize());
        meta.setContentEncoding("UTF-8");
        meta.setContentType(file.getContentType());

        //向存储桶中保存文件
        String fileType = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); //文件后缀名
        String uploadPath = "/driver/" + path + "/" + UUID.randomUUID().toString().replaceAll("-", "") + fileType;
        // 01.jpg
        // /driver/auth/0o98754.jpg
        PutObjectRequest putObjectRequest = null;
        try {
            //1 bucket名称
            //2
            putObjectRequest = new PutObjectRequest(tencentCloudProperties.getBucketPrivate(),
                    uploadPath,
                    file.getInputStream(),
                    meta);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        putObjectRequest.setStorageClass(StorageClass.Standard);
        PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); //上传文件
        cosClient.shutdown();

这里区别有点大:

两段代码示例都是关于使用腾讯云 COS Java SDK 来上传文件到 COS 存储桶的。它们展示了两种不同的上传方式,但都实现了相同的目标。下面是它们之间的关系和区别:

  1. 基本上传:

    • 第一段代码是一个更简单的上传示例,它直接使用本地文件对象 localFile 和目标路径 key 来创建 PutObjectRequest 请求。
    • 它没有设置任何额外的元数据信息,直接使用文件的默认属性。
  2. 带元数据的上传:

    • 第二段代码在上传文件之前设置了一些元数据信息,例如内容长度、内容编码和内容类型。
    • 它还生成了一个随机的文件名和路径,以确保上传的文件名是唯一的。

两段代码的共同点:

  • 都使用了 PutObjectRequest 来设置上传请求的参数。
  • 都调用了 cosClient.putObject 方法来执行上传操作,并接收 PutObjectResult 作为响应。

不同点:

  • 第一段代码直接使用本地文件进行上传,而第二段代码使用文件输入流 file.getInputStream()
  • 第二段代码设置了更多的元数据信息,这在需要自定义文件属性时非常有用。
  • 第二段代码中还设置了存储类别 StorageClass,这可以影响文件的存储成本和可用性。

在实际应用中,你可以根据需求选择使用哪种方式。如果你需要上传的文件已经存在于本地文件系统中,并且不需要设置特殊的元数据,那么可以使用第一段代码的方式。如果你需要更多的控制,比如设置自定义的元数据、生成唯一的文件名或者使用文件流,那么第二段代码的方式可能更适合你。

二  回显url

1  详细信息

对象存储 生成预签名 URL-SDK 文档-文档中心-腾讯云 (tencent.com)

这个支持我们上传了文件之后,来获得这个文件的url

生成临时访问URL的功能不仅限于图片文件,它适用于所有存储在腾讯云对象存储(COS)中的文件类型,包括但不限于:

  • 图片文件(如.jpg, .png, .gif等)
  • 文档文件(如.pdf, .docx, .xlsx等)
  • 视频文件(如.mp4, .mov等)
  • 音频文件(如.mp3, .wav等)
  • 以及其他任何格式的文件

要获取其他类型文件的临时访问URL,你只需要将文件路径作为参数传递给getImageUrl方法,方法本身会生成一个适用于该路径的临时URL,无论该路径指向的是图片还是其他类型的文件。

生成预签名 URL

对象存储(Cloud Object Storage,COS)支持使用预签名 URL 进行对象的上传、下载,原理是将签名嵌入 URL 生成签名链接

2  代码编写

官方给的创造临时URL的示例代码:

// 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:创建 COSClient
COSClient cosClient = createCOSClient();

// 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
String bucketName = "examplebucket-1250000000";
// 对象键(Key)是对象在存储桶中的唯一标识。详情请参见 [对象键](https://cloud.tencent.com/document/product/436/13324)
String key = "exampleobject";

GeneratePresignedUrlRequest req =
        new GeneratePresignedUrlRequest(bucketName, key, HttpMethodName.GET);

// 设置下载时返回的 http 头
ResponseHeaderOverrides responseHeaders = new ResponseHeaderOverrides();
String responseContentType = "image/x-icon";
String responseContentLanguage = "zh-CN";
// 设置返回头部里包含文件名信息
String responseContentDispositon = "filename=exampleobject";
String responseCacheControl = "no-cache";
String cacheExpireStr =
        DateUtils.formatRFC822Date(new Date(System.currentTimeMillis() + 24L * 3600L * 1000L));
responseHeaders.setContentType(responseContentType);
responseHeaders.setContentLanguage(responseContentLanguage);
responseHeaders.setContentDisposition(responseContentDispositon);
responseHeaders.setCacheControl(responseCacheControl);
responseHeaders.setExpires(cacheExpireStr);

req.setResponseHeaders(responseHeaders);

// 设置签名过期时间(可选),若未进行设置,则默认使用 ClientConfig 中的签名过期时间(1小时)
// 这里设置签名在半个小时后过期
Date expirationDate = new Date(System.currentTimeMillis() + 30L * 60L * 1000L);
req.setExpiration(expirationDate);

// 填写本次请求的参数
req.addRequestParameter("param1", "value1");
// 填写本次请求的头部
// host 必填
req.putCustomRequestHeader(Headers.HOST, cosClient.getClientConfig().getEndpointBuilder().buildGeneralApiEndpoint(bucketName));
req.putCustomRequestHeader("header1", "value1");

URL url = cosClient.generatePresignedUrl(req);
System.out.println(url.toString());

// 确认本进程不再使用 cosClient 实例之后,关闭即可
cosClient.shutdown();

其中我们主要用到这两个方法:

2.1  创建请求对象
GeneratePresignedUrlRequest req =
        new GeneratePresignedUrlRequest(bucketName, key, HttpMethodName.GET);
  1. 创建请求对象:这行代码创建了一个GeneratePresignedUrlRequest的实例,这个实例包含了生成预签名URL所需的所有信息。

  2. 参数说明

    • bucketName:这是一个String类型的参数,表示您要访问的COS存储桶的名称。存储桶名称通常遵循BucketName-APPID的格式,其中APPID是您在腾讯云平台的账户标识。
    • key:这也是一个String类型的参数,表示存储桶中对象的唯一标识符,也就是对象键(Key)。
    • HttpMethodName.GET:这是一个枚举类型的参数,表示您希望对COS对象执行的HTTP方法。在这个例子中,使用GET方法,意味着生成的URL将用于下载或读取对象。
  3. 作用:创建GeneratePresignedUrlRequest对象的主要作用是为了生成一个可以在指定HTTP方法下访问COS对象的URL,而无需提供用户的永久密钥。这个URL将在一定时间后过期,提供临时的访问权限。

  4. 后续操作:创建了GeneratePresignedUrlRequest对象之后,您可能还需要设置其他属性,比如过期时间(setExpiration方法)、响应头(setResponseHeaders方法)等,然后使用COSClient实例的generatePresignedUrl方法来生成最终的预签名URL。

2.2  创建最终的URL
URL url = cosClient.generatePresignedUrl(bucketName, key, expirationDate, method, headers, params);
  1. 方法调用cosClient.generatePresignedUrl是一个方法调用,它属于COSClient类,用于生成一个预签名URL。

  2. 参数

    • bucketName:存储桶的名称,格式通常是BucketName-APPID
    • key:对象在存储桶中的唯一标识符,即对象键(Key)。
    • expirationDate:预签名URL的过期时间,表示这个URL在何时之后将不再有效。这个时间是基于当前时间加上一个额外的时间(例如,30分钟或1小时)来设置的。
    • method:一个HttpMethodName枚举,表示这个预签名URL将用于哪种HTTP方法,例如GETPUT等。
    • headers:一个Map<String, String>,包含要包含在签名中的HTTP头部信息。这个参数是可选的,如果不需要特别指定头部,可以传递一个空的Map或者null。
    • params:一个Map<String, String>,包含要包含在URL查询字符串中的参数。这个参数也是可选的。
  3. 返回值:方法返回一个URL对象,这个对象包含了生成的预签名URL。这个URL可以被用于在指定的过期时间之前执行指定的HTTP方法来访问COS上的对象。

  4. 作用:生成的预签名URL允许用户在没有密钥的情况下访问COS资源。这在需要临时授权他人访问某个资源时非常有用,例如,允许用户下载一个文件而不需要他们拥有访问存储桶的权限。

  5. 安全性:预签名URL的安全性在于它结合了存储桶策略、密钥和过期时间,确保了只有拥有这个URL的用户才能在有限的时间内访问特定的资源。

  6. 使用场景:这个预签名URL可以用于多种场景,包括但不限于:

    • 临时分享文件下载链接。
    • 允许第三方服务在没有密钥的情况下上传文件到您的存储桶。
    • 实现一个安全的、无需密钥的文件上传或下载接口。

2.3  项目实际的使用

具体代码的临时回调地址实现:

将腾讯对象存储的桶,所需要上传文件的url,和方法的请求类型作为参数创建一个GeneratePresignedUrlRequest对象,设置了临时的时间,并传入了腾讯云服务的客户端对象里面,获取了url。

   public String getImageUrl(String path) {
        if(!StringUtils.hasText(path)) return "";
        //获取cosclient对象
        COSClient cosClient = this.getCosClient();
        //GeneratePresignedUrlRequest
        GeneratePresignedUrlRequest request =
                new GeneratePresignedUrlRequest(tencentCloudProperties.getBucketPrivate(),
                        path, HttpMethodName.GET);
        //设置临时URL有效期为15分钟
        Date date = new DateTime().plusMinutes(15).toDate();
        request.setExpiration(date);
        //调用方法获取
        URL url = cosClient.generatePresignedUrl(request);
        cosClient.shutdown();
        return url.toString();
    }
}

认证功能

一  腾讯云身份证认证接口

在做这些认证接口之前要去开通相应的服务,比如文字识别服务

官方文档:

API Explorer - 云 API - 控制台 (tencent.com)

1  使用说明

点击地址后,我们看到这个页面

其中我们注意到中间和右边的。中间是可选项,右边是示例代码。我们输入region,并选择要认证的文件为base64格式。如图所示。

2  实现代码

之后下面就是示代码

package com.tencent;
import com.tencentcloudapi.common.AbstractModel;

import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.ocr.v20181119.OcrClient;
import com.tencentcloudapi.ocr.v20181119.models.*;

public class Sample
{
    public static void main(String [] args) {
        try{
            // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
            // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
            // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
            Credential cred = new Credential("SecretId", "SecretKey");
            // 实例化一个http选项,可选的,没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("ocr.tencentcloudapi.com");
            // 实例化一个client选项,可选的,没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);
            // 实例化要请求产品的client对象,clientProfile是可选的
            OcrClient client = new OcrClient(cred, "ap-guangzhou", clientProfile);
            // 实例化一个请求对象,每个接口都会对应一个request对象
            IDCardOCRRequest req = new IDCardOCRRequest();
            req.setImageBase64("1");
            // 返回的resp是一个IDCardOCRResponse的实例,与请求对象对应
            IDCardOCRResponse resp = client.IDCardOCR(req);
            // 输出json格式的字符串回包
            System.out.println(AbstractModel.toJsonString(resp));
        } catch (TencentCloudSDKException e) {
            System.out.println(e.toString());
        }
    }
}

稍作修改后,我们项目最终的代码。

        try {
            //图片转换base64格式字符串
            byte[] base64 = Base64.encodeBase64(file.getBytes());
            String fileBase64 = new String(base64);
            // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
            Credential cred = new Credential
                    (tencentCloudProperties.getSecretId(), tencentCloudProperties.getSecretKey());
            // 实例化一个http选项,可选的,没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("ocr.tencentcloudapi.com");
            // 实例化一个client选项,可选的,没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);
            // 实例化要请求产品的client对象,clientProfile是可选的
            OcrClient client = new OcrClient(cred, tencentCloudProperties.getRegion(), clientProfile);
            // 实例化一个请求对象,每个接口都会对应一个request对象,并把图片设置进去
            IDCardOCRRequest req = new IDCardOCRRequest();
            req.setImageBase64(fileBase64);
            // 返回的resp是一个IDCardOCRResponse的实例,与请求对象对应
            IDCardOCRResponse resp = client.IDCardOCR(req);
            }
            return idCardOcrVo;
        } catch (Exception e) {
            throw new GuiguException(ResultCodeEnum.DATA_ERROR);
        }
    }

验证驾驶证以及其他验证相关的功能和上面同理

腾讯位置服务地图选点

一  介绍

他主要有六种服务。我们这里使用距离计算服务

二  前提准备

使用“腾讯位置服务地图选点”插件时,我们要开通“腾讯位置服务”,并且设置授权APP ID,这样才能使用正确使用选点服务

第一步: 访问腾讯官网 https://lbs.qq.com/

第二步 进行注册,手机号或者微信或者其他方式

第三步 使用注册账号进行登录,找到控制台

第四步 在应用管理 -- 我的应用 ,创建应用

第五步 在创建应用中,添加key

第六步 找到添加key的值,要自己保存起来

三  代码演示

官方的接口文档:

WebService API | 腾讯位置服务 (qq.com)

1  封装从前端传来的数据

这四个值是后面请求接口需要用到的

@Data
public class CalculateDrivingLineForm {

    @Schema(description = "起始地点经度")
    private BigDecimal startPointLongitude;

    @Schema(description = "起始点伟度")
    private BigDecimal startPointLatitude;

    @Schema(description = "结束地点经度")
    private BigDecimal endPointLongitude;

    @Schema(description = "结束地点经度")
    private BigDecimal endPointLatitude;
}

2  封装前提准备中所申请服务的key

这个也是后面请求接口需要用到的。

我们将他放在配置文件里面,用一个变量提取出来,避免硬编码。

配置文件  :

读取配置文件

@Value("tencent.cloud.map")
    private String key;

3  发送请求并处理结果

我们对请求的地址进行处理,用RestTemplate发送请求,将结果返回给前端

 //计算驾驶线路
    @Override
    public DrivingLineVo calculateDrivingLine(CalculateDrivingLineForm calculateDrivingLineForm) {
        // 向微信提供的接口地址发送请求,处理返回值
        /*
        https://apis.map.qq.com/ws/direction/v1/driving/
        ?from=39.915285,116.403857
        &to=39.915285,116.803857
        key=[你的key]
         */

        //1  定义原始的url,将里面的参数给替代掉
        String url = "https://apis.map.qq.com/ws/direction/v1/driving/" +
                "        ?from={from}" +
                "        &to={to}" +
                "        key={key}";

        //2 替代起始经纬度
        String begin = calculateDrivingLineForm.getStartPointLatitude() + "," +
                calculateDrivingLineForm.getStartPointLongitude();
        url.replace("{from}", begin);

        //3 代替终点经纬度
        String end = calculateDrivingLineForm.getEndPointLatitude() + "," +
                calculateDrivingLineForm.getEndPointLongitude();
        url.replace("{to}", end);

        //4 代替我的key
        url.replace("key", key);

        //5 利用restTemplate来发送请求,获得返回值
        JSONObject result = restTemplate.getForObject(url, JSONObject.class);

        //6 处理返回结果 判断调用是否成功
        int status = result.getIntValue("status");
        if(status != 0) {
            //失败
            throw new GuiguException(ResultCodeEnum.MAP_FAIL);
        }

        //7 获取返回路线信息  他会有三条路径,第一条是最优的,所以get 0
        JSONObject route =
                result.getJSONObject("result").getJSONArray("routes").getJSONObject(0);

        //8  创建vo对象
        DrivingLineVo drivingLineVo = new DrivingLineVo();
        //预估时间
        drivingLineVo.setDuration(route.getBigDecimal("duration"));
        //距离  6.583 == 6.58 / 6.59
        drivingLineVo.setDistance(route.getBigDecimal("distance")
                .divide(new BigDecimal(1000))
                .setScale(2, RoundingMode.HALF_UP));
        //路线
        drivingLineVo.setPolyline(route.getJSONArray("polyline"));

        return drivingLineVo;
    }

4  替换字符串方法

String Str.replace(oldvalue, newvalue);

oldvalue是想要替代的值,newvalue是替代的值。返回值是替代完后的值

我们上面代码中

 //5 利用restTemplate来发送请求,获得返回值
        JSONObject result = restTemplate.getForObject(url, JSONObject.class);

这行代码做了以下几件事情:

  1. 使用RestTemplate: restTemplate 是Spring框架提供的一个用于发起HTTP请求的工具类。它简化了HTTP客户端的使用,使得发起网络请求变得更加简单。

  2. 发起GET请求: 这行代码使用 getForObject 方法发起了一个GET请求。getForObject 是RestTemplate中用于发送GET请求并将响应体映射为对象的方法。

  3. 请求URL: url 是一个字符串,包含了请求的完整URL地址。

  4. 返回类型: JSONObject.class 指定了响应体应该被映射(转换成)的类型。这意味着服务器返回的JSON响应将被转换成一个 JSONObject 对象。

  5. 结果赋值: 转换后的 JSONObject 对象被赋值给变量 result。之后,你可以使用这个 result 对象来访问JSON响应中的各种属性和值。

我们将map对应的属性给url赋值。这是restTemplate封装的方法。

腾讯云数据万象服务CI

官网地址:https://cloud.tencent.com/product/ci

API文档地址:https://cloud.tencent.com/document/product/460/57227

一  介绍

数据万象(Cloud Infinite,CI)是依托腾讯云对象存储的数据处理平台,涵盖图片处理、内容审核、媒体处理、AI 识别、文档预览等功能,为客户提供一站式的专业数据处理解决方案,满足您多种业务场景的需求。

我们项目中很多业务都可以使用腾讯云的数据万象服务,比如审核司机上传的身份证、驾驶证照片与手持证件照片等是否包含暴力色情的内容,还有审核代驾过程对话记录是否含有暴力色情等等。如果用人工审核,速度太慢,所以我们需要用数据万象的AI引擎来帮我们审核。

二  开通数据万象服务

开通服务后,绑定我们需要处理的cos的桶,手动绑定

三  具体审核

1  审核图片

根据path读取内容并审核。这里我们审核图片。

@Autowired
    private TencentCloudProperties tencentCloudProperties;

    private COSClient getPrivateCOSClient() {
        COSCredentials cred = new BasicCOSCredentials(tencentCloudProperties.getSecretId(), tencentCloudProperties.getSecretKey());
        ClientConfig clientConfig = new ClientConfig(new Region(tencentCloudProperties.getRegion()));
        clientConfig.setHttpProtocol(HttpProtocol.https);
        COSClient cosClient = new COSClient(cred, clientConfig);
        return cosClient;
    }

    @Override
    public Boolean imageAuditing(String path) {
        COSClient cosClient = this.getPrivateCOSClient();

        //审核图片内容
        //1.创建任务请求对象
        ImageAuditingRequest request = new ImageAuditingRequest();
        //2.添加请求参数 参数详情请见 API 接口文档
        //2.1设置请求 bucket
        request.setBucketName(tencentCloudProperties.getBucketPrivate());
        //2.2设置审核策略 不传则为默认策略(预设)
        //request.setBizType("");
        //2.3设置 bucket 中的图片位置
        request.setObjectKey(path);
        //3.调用接口,获取任务响应对象
        ImageAuditingResponse response = cosClient.imageAuditing(request);
        cosClient.shutdown();
        //用于返回该审核场景的审核结果,返回值:0:正常。1:确认为当前场景的违规内容。2:疑似为当前场景的违规内容。
        if (!response.getPornInfo().getHitFlag().equals("0")
                || !response.getAdsInfo().getHitFlag().equals("0")
                || !response.getTerroristInfo().getHitFlag().equals("0")
                || !response.getPoliticsInfo().getHitFlag().equals("0")
        ) {
            return false;
        }
        return true;
    }

然后在我们上传图片的接口调用这个方法。如果发现违规,删除存放的照片并报错

Boolean imageAuditing = ciService.imageAuditing(uploadPath);
if(!imageAuditing) {
    //删除违规图片
    cosClient.deleteObject(tencentCloudProperties.getBucketPrivate(),uploadPath);
    throw new GuiguException(ResultCodeEnum.IMAGE_AUDITION_FAIL);
}

2  审核文本(语音转过来的文字)

@Override
    public TextAuditingVo textAuditing(String content) {
        // 判断传过来的语音有没有内容
        if(!StringUtils.hasText(content)) {
            TextAuditingVo textAuditingVo = new TextAuditingVo();
            textAuditingVo.setResult("0");
            return textAuditingVo;
        }
        // 创建客户端
        COSClient cosClient = this.getPrivateCOSClient();

        TextAuditingRequest request = new TextAuditingRequest();
        request.setBucketName(tencentCloudProperties.getBucketPrivate());

        //将图片转换为base64字符串
        byte[] encoder = org.apache.commons.codec.binary.Base64.encodeBase64(content.getBytes());
        String contentBase64 = new String(encoder);
        request.getInput().setContent(contentBase64);
        request.getConf().setDetectType("all");

        TextAuditingResponse response = cosClient.createAuditingTextJobs(request);
        AuditingJobsDetail detail = response.getJobsDetail();
        TextAuditingVo textAuditingVo = new TextAuditingVo();
        if ("Success".equals(detail.getState())) {
            //检测结果: 0(审核正常),1 (判定为违规敏感文件),2(疑似敏感,建议人工复核)。
            String result = detail.getResult();

            //违规关键词
            StringBuffer keywords = new StringBuffer();
            List<SectionInfo> sectionInfoList = detail.getSectionList();
            for (SectionInfo info : sectionInfoList) {
                String pornInfoKeyword = info.getPornInfo().getKeywords();
                String illegalInfoKeyword = info.getIllegalInfo().getKeywords();
                String abuseInfoKeyword = info.getAbuseInfo().getKeywords();
                if (pornInfoKeyword.length() > 0) {
                    keywords.append(pornInfoKeyword).append(",");
                }
                if (illegalInfoKeyword.length() > 0) {
                    keywords.append(illegalInfoKeyword).append(",");
                }
                if (abuseInfoKeyword.length() > 0) {
                    keywords.append(abuseInfoKeyword).append(",");
                }
            }
            textAuditingVo.setResult(result);
            textAuditingVo.setKeywords(keywords.toString());
        }
        return textAuditingVo;
    }

调用方法来审核:

//增加文本审核
        TextAuditingVo textAuditingVo =
                ciFeignClient.textAuditing(orderMonitorForm.getContent()).getData();
        orderMonitorRecord.setResult(textAuditingVo.getResult());
        orderMonitorRecord.setKeywords(textAuditingVo.getKeywords());


http://www.kler.cn/a/307242.html

相关文章:

  • Oracle 11g rac 集群节点的修复过程
  • 天才的懈怠 : 平衡二叉树
  • vue3项目中内嵌vuepress工程两种实现方式
  • Java之泛型--对象指定多个泛型类型(有示例)
  • ubuntu cmake CPack将第三方库进行打包
  • Linux手动安装nginx
  • 将jar包作为lib导入和maven依赖导入有什么区别?
  • seafaring靶场渗透测试
  • 【C语言】(指针系列2)指针运算+指针与数组的关系+二级指针+指针数组+《剑指offer面试题》
  • 重塑科普展厅魅力,以用户体验为核心的策略性规划新探索!
  • 『功能项目』切换职业面板【48】
  • php部署到apach服务器上遇到的问题
  • 萤石举办2024清洁机器人新品发布会 多维智能再造行业标杆
  • 2024.9.15周报
  • Kubernetes标签与标签选择器
  • 容器技术--Docker应用部署
  • Redis——常用数据类型List
  • C# 入坑JAVA 潜规则 大小写敏感文件名和类名 枚举等 入门系列2
  • 机器学习--神经网络
  • 【裸机装机系列】4.kali(ubuntu)-配置个人用户的sudo权限并进行bashrc的其他配置
  • Qt常用控件——QComboBox
  • Redisson分布式锁实现及原理详解
  • Visual Studio(vs)下载安装C/C++运行环境配置和基本使用注意事项
  • 深度学习之微积分预备知识点
  • HTTP 的请求方式有哪些和有什么区别
  • MATLAB 可视化基础:绘图命令与应用