腾讯云使用

news2024/12/24 20:47:06

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

对象存储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.coloradmin.cn/o/2130057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文教你弄懂网络协议栈以及报文格式

文章目录 OSI七层网络协议栈示意图1. 应用层&#xff08;Application Layer&#xff09;2. 表示层&#xff08;Presentation Layer&#xff09;3. 会话层&#xff08;Session Layer&#xff09;4. 传输层&#xff08;Transport Layer&#xff09;5. 网络层&#xff08;Network …

Qt QSerialPort数据发送和接收DataComm

文章目录 Qt QSerialPort数据发送和接收DataComm2.添加 Qt Serial Port 模块3.实例源码 Qt QSerialPort数据发送和接收DataComm Qt 框架的Qt Serial Port 模块提供了访问串口的基本功能&#xff0c;包括串口通信参数配置和数据读写&#xff0c;使用 Qt Serial Port 模块就可以…

【超详细】Plaxis软件简介、 Plaxis Python API环境搭建、自动化建模、Python全自动实现、典型岩土工程案例实践应用

查看原文>>>【案例教程】PLAXIS软件丨自动化建模、典型岩土工程案例解析、模型应用、数据分析、图表制作 目录 第一部分&#xff1a;Plaxis软件简介及 Plaxis Python API环境搭建 第二部分&#xff1a;Plaxis自动化建模-基础案例 第三部分&#xff1a;进阶案例-Pyt…

C# HttpClient 实现HTTP Client 请求

为什么&#xff1f; C# httpclient get 请求和直接浏览器请求结果不一样 为了测试一下HTTP接口的&#xff0c;用C# HttpClient实现了HTTP客户端&#xff0c;用于从服务端获取数据。 但是遇到了问题&#xff1a;C# httpclient get 请求和直接浏览器请求结果不一样 初始代码如…

高德地图绘图,点标记,并计算中心点

效果图 代码如下 / 地图初始化 const map: any ref(null) const marker: any ref(null) const polyEditor: any ref(null) const view: any ref(false) const squareVertices: any ref([]) const init () > {workSpacesCurrent(workspaceId, {}).then((res) > {c…

html+css+js网页设计 旅游 龙门石窟8个页面

htmlcssjs网页设计 旅游 龙门石窟8个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#…

实战案例(5)防火墙通过跨三层MAC识别功能控制三层核心下面的终端

如果网关是在核心设备上面&#xff0c;还能用MAC地址进行控制吗&#xff1f; 办公区域的网段都在三层上面&#xff0c;防火墙还能基于MAC来控制吗&#xff1f; 采用正常配置模式的步骤与思路 &#xff08;1&#xff09;配置思路与上面一样 &#xff08;2&#xff09;与上面区…

分类预测|基于鲸鱼优化-卷积-门控制单元网络-注意力数据分类预测Matlab程序 WOA-CNN-GRU-Attention

分类预测|基于鲸鱼优化-卷积-门控制单元网络-注意力数据分类预测Matlab程序 WOA-CNN-GRU-Attention 文章目录 一、基本原理1. WOA&#xff08;鲸鱼优化算法&#xff09;2. CNN&#xff08;卷积神经网络&#xff09;3. GRU&#xff08;门控循环单元&#xff09;4. Attention&…

计算机毕业设计 基于SpringBoot的课程教学平台的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

IMS中的号码规整 5G注册流程中的语音相关参数

目录 1. IMS中的号码规整 1.1 主要内容 1.2 什么是 IMS 的号码规整及 FAQ 1.3 VoNR(VoLTE) 打 VoNR(VoLTE),被叫号码规整流程 主叫 AS 来做规整 主叫 S-CSCF 来做规整 2. 5G注册流程中的语音相关参数 2.1 主要内容 2.2 使用 VoNR 的第一步:5G注册流程 2.3 5G 注册流…

2024年9月12日(k8s环境及测试 常用命令)

一、环境准备及测试 1、报错处理&#xff1a; kube-system calico-node-5wvln 0/1 Init:0/3 0 16h kube-system calico-node-d7xfb 0/1 Init:0/3 0 16h ku…

3个WebSocket的.Net开源项目

推荐3个有关Websocket的.Net开源项目。 一、FreeIM 一个使用Websocket协议实现的、高性能即时聊天组件&#xff0c;可用于群聊、好友聊天、游戏直播等场景。 1、跨平台&#xff1a;基于.NetCore开发&#xff0c;支持Windows、Mono、Liunx、Windows Azure、Docker。 2、支持…

vue3使用panolens.js实现全景,带有上一个下一个,全屏功能

panolens官方文档Home - Panolens 1.加载核心js库 &#xff08;文件在untils里面&#xff09; import /utils/panolens/three.min.js; import /utils/panolens/panolens.min.js; /项目中 /railway/modalIframe/playPanorama/player/js/panolens-ht.js 为修改后版本 可以获取…

elementUI中el-form 嵌套el-from 如何进行表单校验?

在el-form中嵌套另一个el-form进行表单校验和添加规则&#xff0c;首先&#xff0c;需要确保每个嵌套的el-form都有自己的model、rules和ref。 以下是一个简化的示例&#xff1a; <template><el-form :model"parentForm" :rules"parentRules" r…

推荐7款可以写论文的AI免费工具,原创一键生成神器!

在当今学术研究和写作领域&#xff0c;AI技术的应用越来越广泛&#xff0c;特别是在论文写作方面。为了帮助学生和研究人员提高写作效率和质量&#xff0c;以下推荐7款可以写论文的AI免费工具&#xff0c;这些工具均具备一键生成高质量论文的功能&#xff0c;是原创写作的神器。…

工业机器人9公里远距离图传模块,无人机低延迟高清视界,跨过距离限制

在科技日新月异的今天&#xff0c;无线通信技术正以未有的速度发展&#xff0c;其中&#xff0c;图传模块作为连接现实与数字世界的桥梁&#xff0c;正逐步展现出其巨大的潜力和应用价值。今天&#xff0c;我们将聚焦一款引人注目的产品——飞睿智能9公里远距离图传模块&#x…

自制一键杀死端口进程程序# tomcat 如何杀死tomcat进程

直接cmd 窗口执行如下命令即可 netstat -ano | findstr :8080 taskkill /F /PID <PID>简简单单的两个指令,总是记不住,也懒的记, 每次端口冲突的时候, 都是直接查百度,很苦逼, 如果有一个程序,直接输入端口号,点击按钮直接杀死进程,岂不爽歪歪. 跟我一起制作一个屠猫的…

【CSS】 Grid布局:现代网页设计的基石

引言 最近接到一个网页布局比较复杂的页面&#xff0c;看了半天还是决定用grid布局来写&#xff0c;记录一下 布局是构建用户界面的关键部分。CSS Grid布局提供了一种简单而强大的方式来创建复杂的网格布局&#xff0c;它让设计师和开发者能够更直观、更灵活地控制网页的结构。…

git pull之后发现项目错误,如何回到之前的版本方法

目录 首先我们打开小程序的cmd的黑窗口&#xff0c;git reflog查看之前的版本 之后再git reset --hard main{1} 我这个就已经返回了之前的6daaa2e的版本了 首先我们打开小程序的cmd的黑窗口&#xff0c;git reflog查看之前的版本 之后再git reset --hard main{1} 我这个就已…

Haption力反馈设备在机器人遥操作中的应用优势

在工业、医疗、科研等多个领域&#xff0c;机器人遥操作正在成为一项关键技术&#xff0c;它允许操作者在远离实际工作环境的情况下&#xff0c;通过远程控制系统对机器人进行精准操作。Haption Virtuose力反馈设备作为遥操作系统中的重要组成部分&#xff0c;其应用优势日益凸…