java接收微信小程序的图片路径_【Java】微信小程序imgSecCheck接口示例-校验一张图片是否含有违法违规内容...

787e351a710195a5bbe2d06079384ca2.png

近期应该部分个人开发者小程序会收到如下通知

c4e8fa1f021f17bff3c61b4b678db4ac.png

为了快速解决问题,就直接使用官方提供的接口

imgSecCheck校验一张图片是否含有违法违规内容个人小程序只是图片的一些处理识别。固只拿imgSecCheck接口进行代码示例了。

1.在自己的Java后台服务增加接口调用(api.weixin.qq.com不能直接加入小程序安全域名中)

2.在小程序选择图片后优先走违法违规校验。校验通过再走自己的业务代码。

Java实现获取小程序的图片文件并进行违法违规校验

wx.uploadFile 传递图片文件到后台 wx.uploadFile({

url: 图片违法违规校验接口地址,

filePath: res.tempFilePaths[0],

header: {

'content-type': 'multipart/form-data'

},

name: 'file',

success: function(checkres) {

var checkResult = JSON.parse(checkres.data);

console.info(checkResult);

if (checkResult.errcode == '0') {

//校验没有违法违规进行自己业务代码处理

} else {

if (checkResult.errcode == '87014') {

wx.hideLoading();

wx.showModal({

content: '存在敏感内容,请更换图片',

showCancel: false,

confirmText: '明白了'

})

} else {

wx.hideLoading();

wx.showModal({

content: '其他错误,稍后再试',

showCancel: false,

confirmText: '明白了'

})

}

}

}

后台代码

AccessTokenWX .javaimport com.fasterxml.jackson.annotation.JsonInclude;

/**

* @Description AccessTokenWX

* @author 小帅丶

* @className AccessTokenWX

* @Date 2019/9/29-10:22

**/

@JsonInclude(JsonInclude.Include.NON_NULL)

public class AccessTokenWX {

private String access_token;

private Integer expires_in;

private String errcode;

private String errmsg;

//set/get省略

} /**

* 图片过滤检测

* @param file 图片文件

* @return

*/

@RequestMapping(value = "/imgcheck", method = {RequestMethod.POST})

@ResponseBody

public AccessTokenWX checkPic(@RequestParam(value = "file") MultipartFile file, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {

String token = "";

//自己写一个定时任务或其他方式 获取AccessToken

AccessTokenWX accessTokenWX = new AccessTokenWX();

try {

token = getAccessTokenJob.getAccessToken();

String url = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=" + token;

String result = uploadFile(url, file);

accessTokenWX = JSON.parseObject(result, AccessTokenWX.class);

System.out.println("图片检测结果 = " + result);

return accessTokenWX;

} catch (Exception e) {

System.out.println("----------------调用腾讯内容过滤系统出错------------------" + e.getMessage());

accessTokenWX.setErrcode("500");

accessTokenWX.setErrmsg("system错误");

return accessTokenWX;

}

}

/**

* 上传二进制文件

* @param graphurl 接口地址

* @param file 图片文件

* @return

*/

public static String uploadFile(String graphurl,MultipartFile file) {

String line = null;//接口返回的结果

try {

// 换行符

final String newLine = "rn";

final String boundaryPrefix = "--";

// 定义数据分隔线

String BOUNDARY = "========7d4a6d158c9";

// 服务器的域名

URL url = new URL(graphurl);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

// 设置为POST情

conn.setRequestMethod("POST");

// 发送POST请求必须设置如下两行

conn.setDoOutput(true);

conn.setDoInput(true);

conn.setUseCaches(false);

// 设置请求头参数

conn.setRequestProperty("connection", "Keep-Alive");

conn.setRequestProperty("Charsert", "UTF-8");

conn.setRequestProperty("Content-Type","multipart/form-data; boundary=" + BOUNDARY);

conn.setRequestProperty("User-Agent","Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1");

OutputStream out = new DataOutputStream(conn.getOutputStream());

// 上传文件

StringBuilder sb = new StringBuilder();

sb.append(boundaryPrefix);

sb.append(BOUNDARY);

sb.append(newLine);

// 文件参数,photo参数名可以随意修改

sb.append("Content-Disposition: form-data;name="image";filename=""

+ "https://api.weixin.qq.com" + """ + newLine);

sb.append("Content-Type:application/octet-stream");

// 参数头设置完以后需要两个换行,然后才是参数内容

sb.append(newLine);

sb.append(newLine);

// 将参数头的数据写入到输出流中

out.write(sb.toString().getBytes());

// 读取文件数据

out.write(file.getBytes());

// 最后添加换行

out.write(newLine.getBytes());

// 定义最后数据分隔线,即--加上BOUNDARY再加上--。

byte[] end_data = (newLine + boundaryPrefix + BOUNDARY

+ boundaryPrefix + newLine).getBytes();

// 写上结尾标识

out.write(end_data);

out.flush();

out.close();

// 定义BufferedReader输入流来读取URL的响应

BufferedReader reader = new BufferedReader(new InputStreamReader(

conn.getInputStream()));

while ((line = reader.readLine()) != null) {

return line;

}

} catch (Exception e) {

System.out.println("发送POST请求出现异常!" + e);

}

return line;

}

为了方便大家。我这里直接封装了一个接口供大家使用

接口地址:https://www.ydxiaoshuai.cn/xai/rest/token/imgcheck/general

请求方式: POST

Body参数: access_token 接口调用凭证

file 图片文件

POSTMAN截图示意

a19efd7d4144998898b02cfccf526cc7.png

实现Controller代码如下 /**

* 图片过滤检测

* @param file 要校验的图片

* @param access_token 接口调用凭证

* @return

*/

@RequestMapping(value = "/imgcheck/general", method = {RequestMethod.POST})

@ResponseBody

public AccessTokenWX checkPicgeneral(@RequestParam(value = "file") MultipartFile file, String access_token,HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {

logger.info("获取access_token======" + access_token + "访问的ip" + httpServletRequest.getRemoteAddr());

AccessTokenWX accessTokenWX = new AccessTokenWX();

try {

String url = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=" + access_token;

String result = uploadFile(url, file);

accessTokenWX = JSON.parseObject(result, AccessTokenWX.class);

System.out.println("图片检测结果 = " + result);

return accessTokenWX;

} catch (Exception e) {

System.out.println("----------------调用腾讯内容过滤系统出错------------------" + e.getMessage());

accessTokenWX.setErrcode("500");

accessTokenWX.setErrmsg("system错误");

return accessTokenWX;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值