主要调用service代码片段
service方法 调用关系注意看方法指引
。
/**
* 名片扫描
*
* @param file 文件
* @param key 第三方 key
* @return 返回的识别结果
*/
public JSONObject sendScanCard(MultipartFile file, String key) throws IOException {
JSONObject jsonObject = new JSONObject();
//将util创建为对象
HttpSendUtils httpSendUtils = new HttpSendUtils(restTemplate);
try {
//将MultipartFile文件转换为file
File convert = FileUtils.convert(file);
//将file转换为base64字符串
String base64EncoderImg = Md5Utils.fileToBase64(convert.getPath());
//删除创建的临时文件
FileUtils.convert(file).delete();
//封装参数集合
MultiValueMap<String, String> stringMultiValueMap = new LinkedMultiValueMap<>();
stringMultiValueMap.add("image", base64EncoderImg);
stringMultiValueMap.add("key", key);
String result = httpSendUtils.UPost(this.scanPath, stringMultiValueMap);
//将返回数据转换成json
jsonObject = JSONObject.parseObject(result);
} catch (Exception e) {
e.printStackTrace();
logger.info("扫描图片发成异常");
}
return jsonObject;
}
将MultipartFile 转换为file保存为本地临时文件获取路径的方法以上调用的:FileUtils.convert(file);
/**
* 将MultipartFile类型的文件转换为file文件
*
* @param file MultipartFile 类型的文件
* @return 转换后的文件
*/
public static File convert(MultipartFile file) {
File convFile = new File(file.getOriginalFilename());
try {
convFile.createNewFile();
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
return convFile;
}
发送的post携带参数的请求form-data提交方式:为以上调用的: httpSendUtils.UPost(this.scanPath, stringMultiValueMap);
/**
* Post请求(URL请求头)
* form-data的请求方式
* @param url 请求url
* @return
*/
public String doPost(String url, MultiValueMap<String, String> params) {
//构建请求,拼接请求头
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, urlHeaderBuilder());
//发送请求获取响应返回结果
ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);
//返回结果
return response.getBody();
}
以上就是完美解决调用第三方接口携带图片转换base64作为参数 form-data为提交参数方式的请求,还有待改进但是足以解决刚需,如有更好的方案欢迎评论区给出交流(致力开源,欢迎交流分享)
调用聚合数据名片识别扫描的完美解决方案1
如果解决,别白嫖哦,欢迎打赏 ↩︎