小程序
小游戏
企业微信
微信支付
扫描小程序码分享
API: security.imgSecCheck
微信版本号:7.0.6
基础库版本号:2.6.6
描述:java实现校验一张图片是否含有违法违规内容,代码参考:https://blog.csdn.net/leisure_life/article/details/93881581 这篇文章。
检测一张很黄的图片,返回结果:{errcode=0, errmsg=ok}
请教下是什么问题呢?
8 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
如果你想测试检查不通过的情况,可以在搜索引擎上搜索一些政治人物的图片进行测试。我在使用某些政治任务的图片做测试的时候就会报 《87014-内容含有违法违规内容》这个错误。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
求 能不通过的图 来做验证啊。。。愁死了。。
说明没到黄的程度
兄弟,问题解决了哈,把你的图发来我试试呗,我找的图也提示没问题,qq:1345649302
这个API我也很服,我上传一张黄颜色的瓷砖图片。都判为非法。
我通过QQ群的一个技术群,咨询大牛找到了我个人的问题原因。
原因是:把图片地址当做图片内容,去调用检测接口。是图片文件的问题
确认下这两个:
1、是否采用post请求方式
2、是否已经把unicode转为utf-8
(参考链接:https://www.jb51.net/article/70251.htm)
所以说不要依靠api来检测,ugc必须人工审核
不人工审核就始终过不了审,明白了?
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
如果你想测试检查不通过的情况,可以在搜索引擎上搜索一些政治人物的图片进行测试。我在使用某些政治任务的图片做测试的时候就会报 《87014-内容含有违法违规内容》这个错误。
求 能不通过的图 来做验证啊。。。愁死了。。
说明没到黄的程度
兄弟,问题解决了哈,把你的图发来我试试呗,我找的图也提示没问题,qq:1345649302
这个API我也很服,我上传一张黄颜色的瓷砖图片。都判为非法。
我通过QQ群的一个技术群,咨询大牛找到了我个人的问题原因。
原因是:把图片地址当做图片内容,去调用检测接口。是图片文件的问题
/********* 文件上传 ********/
@Override
public ResponseData upload(MultipartFile file) {
// imgSecCheck是图片检测方法
JSONObject jsonObject = imgSecCheck(file);
if (null == jsonObject){
return ResponseData.fail("jsonObject返回值为空");
} else {
Integer errcode = Integer.parseInt(jsonObject.get("errcode").toString());
log.info("upload, errcode:{}", errcode);
if (0 == errcode){
String str = FastDFSClient.uploadImageAndCrtThumbImage(file);
String result = FastDFSClient.getResAccessUrl(str);
return ResponseData.ok(result);
}
if (87014 == errcode){
return ResponseData.fail("图片含有违法违规内容");
}
return ResponseData.fail("未知错误");
}
}
/*********** FastDFSClient文件内容 ********/
package xxx; // FastDFSClient文件包路径
import com.github.tobato.fastdfs.conn.FdfsWebServer;
import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.proto.storage.DownloadByteArray;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
@Component
public class FastDFSClient {
private static Logger log =LoggerFactory.getLogger(FastDFSClient.class);
private static FastFileStorageClient fastFileStorageClient;
private static FdfsWebServer fdfsWebServer;
@Autowired
public void setFastDFSClient(FastFileStorageClient fastFileStorageClient, FdfsWebServer fdfsWebServer) {
FastDFSClient.fastFileStorageClient = fastFileStorageClient;
FastDFSClient.fdfsWebServer = fdfsWebServer;
}
/**
* @param multipartFile 文件对象
* @return 返回文件地址
* @author qbanxiaoli
* @description 上传文件
*/
public static String uploadFile(MultipartFile multipartFile) {
try {
StorePath storePath = fastFileStorageClient.uploadFile(multipartFile.getInputStream(), multipartFile.getSize(), FilenameUtils.getExtension(multipartFile.getOriginalFilename()), null);
return storePath.getFullPath();
} catch (IOException e) {
log.error(e.getMessage());
return null;
}
}
/**
* @param multipartFile 图片对象
* @return 返回图片地址
* @author qbanxiaoli
* @description 上传缩略图
*/
public static String uploadImageAndCrtThumbImage(MultipartFile multipartFile) {
try {
StorePath storePath = fastFileStorageClient.uploadImageAndCrtThumbImage(multipartFile.getInputStream(), multipartFile.getSize(), FilenameUtils.getExtension(multipartFile.getOriginalFilename()), null);
return storePath.getFullPath();
} catch (Exception e) {
log.error(e.getMessage());
return null;
}
}
/**
* @param file 文件对象
* @return 返回文件地址
* @author qbanxiaoli
* @description 上传文件
*/
public static String uploadFile(File file) {
try {
FileInputStream inputStream = new FileInputStream(file);
StorePath storePath = fastFileStorageClient.uploadFile(inputStream, file.length(), FilenameUtils.getExtension(file.getName()), null);
return storePath.getFullPath();
} catch (Exception e) {
log.error(e.getMessage());
return null;
}
}
/**
* @param file 图片对象
* @return 返回图片地址
* @author qbanxiaoli
* @description 上传缩略图
*/
public static String uploadImageAndCrtThumbImage(File file) {
try {
FileInputStream inputStream = new FileInputStream(file);
StorePath storePath = fastFileStorageClient.uploadImageAndCrtThumbImage(inputStream, file.length(), FilenameUtils.getExtension(file.getName()), null);
return storePath.getFullPath();
} catch (Exception e) {
log.error(e.getMessage());
return null;
}
}
/**
* @param bytes byte数组
* @param fileExtension 文件扩展名
* @return 返回文件地址
* @author qbanxiaoli
* @description 将byte数组生成一个文件上传
*/
public static String uploadFile(byte[] bytes, String fileExtension) {
ByteArrayInputStream stream = new ByteArrayInputStream(bytes);
StorePath storePath = fastFileStorageClient.uploadFile(stream, bytes.length, fileExtension, null);
return storePath.getFullPath();
}
/**
* @param fileUrl 文件访问地址
* @param file 文件保存路径
* @author qbanxiaoli
* @description 下载文件
*/
public static boolean downloadFile(String fileUrl, File file) {
try {
StorePath storePath = StorePath.praseFromUrl(fileUrl);
byte[] bytes = fastFileStorageClient.downloadFile(storePath.getGroup(), storePath.getPath(), new DownloadByteArray());
FileOutputStream stream = new FileOutputStream(file);
stream.write(bytes);
} catch (Exception e) {
log.error(e.getMessage());
return false;
}
return true;
}
/**
* @param fileUrl 文件访问地址
* @author qbanxiaoli
* @description 删除文件
*/
public static boolean deleteFile(String fileUrl) {
if (StringUtils.isEmpty(fileUrl)) {
return false;
}
try {
StorePath storePath = StorePath.praseFromUrl(fileUrl);
fastFileStorageClient.deleteFile(storePath.getGroup(), storePath.getPath());
} catch (Exception e) {
log.error(e.getMessage());
return false;
}
return true;
}
// 封装文件完整URL地址
public static String getResAccessUrl(String path) {
String url = fdfsWebServer.getWebServerUrl() + path;
log.info("上传文件地址为:\n" + url);
return url;
}
}
/****** pom.xml *******/
* 校验一张图片是否含有违法违规内容
* @param multipartFile
* @return
*/
private JSONObject imgSecCheck(MultipartFile multipartFile) {
try {
String accessToken = getAccessToken().getData().toString();
CloseableHttpClient httpclient = HttpClients.createDefault();
CloseableHttpResponse response = null;
HttpPost request = new HttpPost("https://api.weixin.qq.com/wxa/img_sec_check?access_token=" + accessToken);
request.addHeader("Content-Type", "application/octet-stream");
InputStream inputStream = multipartFile.getInputStream();
byte[] byt = new byte[inputStream.available()];
inputStream.read(byt);
request.setEntity(new ByteArrayEntity(byt, ContentType.create("image/jpg")));
response = httpclient.execute(request);
HttpEntity httpEntity = response.getEntity();
String result = EntityUtils.toString(httpEntity, "UTF-8");// 转成string
JSONObject jsonObject = JSONObject.parseObject(result);
return jsonObject;
} catch (Exception e) {
log.info("----------------调用腾讯内容过滤系统出错------------------");
e.printStackTrace();
return null;
}
}
你自己再优化下代码吧
确认下这两个:
1、是否采用post请求方式
2、是否已经把unicode转为utf-8
(参考链接:https://www.jb51.net/article/70251.htm)
所以说不要依靠api来检测,ugc必须人工审核
不人工审核就始终过不了审,明白了?