注:本文的所有演示的代码都基于尚硅谷的尚乐代驾项目
对象存储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 存储桶的。它们展示了两种不同的上传方式,但都实现了相同的目标。下面是它们之间的关系和区别:
-
基本上传:
- 第一段代码是一个更简单的上传示例,它直接使用本地文件对象
localFile
和目标路径key
来创建PutObjectRequest
请求。 - 它没有设置任何额外的元数据信息,直接使用文件的默认属性。
- 第一段代码是一个更简单的上传示例,它直接使用本地文件对象
-
带元数据的上传:
- 第二段代码在上传文件之前设置了一些元数据信息,例如内容长度、内容编码和内容类型。
- 它还生成了一个随机的文件名和路径,以确保上传的文件名是唯一的。
两段代码的共同点:
- 都使用了
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);
-
创建请求对象:这行代码创建了一个
GeneratePresignedUrlRequest
的实例,这个实例包含了生成预签名URL所需的所有信息。 -
参数说明:
bucketName
:这是一个String
类型的参数,表示您要访问的COS存储桶的名称。存储桶名称通常遵循BucketName-APPID
的格式,其中APPID
是您在腾讯云平台的账户标识。key
:这也是一个String
类型的参数,表示存储桶中对象的唯一标识符,也就是对象键(Key)。HttpMethodName.GET
:这是一个枚举类型的参数,表示您希望对COS对象执行的HTTP方法。在这个例子中,使用GET
方法,意味着生成的URL将用于下载或读取对象。
-
作用:创建
GeneratePresignedUrlRequest
对象的主要作用是为了生成一个可以在指定HTTP方法下访问COS对象的URL,而无需提供用户的永久密钥。这个URL将在一定时间后过期,提供临时的访问权限。 -
后续操作:创建了
GeneratePresignedUrlRequest
对象之后,您可能还需要设置其他属性,比如过期时间(setExpiration
方法)、响应头(setResponseHeaders
方法)等,然后使用COSClient
实例的generatePresignedUrl
方法来生成最终的预签名URL。
2.2 创建最终的URL
URL url = cosClient.generatePresignedUrl(bucketName, key, expirationDate, method, headers, params);
-
方法调用:
cosClient.generatePresignedUrl
是一个方法调用,它属于COSClient
类,用于生成一个预签名URL。 -
参数:
bucketName
:存储桶的名称,格式通常是BucketName-APPID
。key
:对象在存储桶中的唯一标识符,即对象键(Key)。expirationDate
:预签名URL的过期时间,表示这个URL在何时之后将不再有效。这个时间是基于当前时间加上一个额外的时间(例如,30分钟或1小时)来设置的。method
:一个HttpMethodName
枚举,表示这个预签名URL将用于哪种HTTP方法,例如GET
、PUT
等。headers
:一个Map<String, String>
,包含要包含在签名中的HTTP头部信息。这个参数是可选的,如果不需要特别指定头部,可以传递一个空的Map或者null。params
:一个Map<String, String>
,包含要包含在URL查询字符串中的参数。这个参数也是可选的。
-
返回值:方法返回一个
URL
对象,这个对象包含了生成的预签名URL。这个URL可以被用于在指定的过期时间之前执行指定的HTTP方法来访问COS上的对象。 -
作用:生成的预签名URL允许用户在没有密钥的情况下访问COS资源。这在需要临时授权他人访问某个资源时非常有用,例如,允许用户下载一个文件而不需要他们拥有访问存储桶的权限。
-
安全性:预签名URL的安全性在于它结合了存储桶策略、密钥和过期时间,确保了只有拥有这个URL的用户才能在有限的时间内访问特定的资源。
-
使用场景:这个预签名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);
这行代码做了以下几件事情:
-
使用RestTemplate:
restTemplate
是Spring框架提供的一个用于发起HTTP请求的工具类。它简化了HTTP客户端的使用,使得发起网络请求变得更加简单。 -
发起GET请求: 这行代码使用
getForObject
方法发起了一个GET请求。getForObject
是RestTemplate中用于发送GET请求并将响应体映射为对象的方法。 -
请求URL:
url
是一个字符串,包含了请求的完整URL地址。 -
返回类型:
JSONObject.class
指定了响应体应该被映射(转换成)的类型。这意味着服务器返回的JSON响应将被转换成一个JSONObject
对象。 -
结果赋值: 转换后的
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());