diff --git a/springboot.iml b/springboot.iml index 5cea170..7ef7640 100644 --- a/springboot.iml +++ b/springboot.iml @@ -175,5 +175,7 @@ + + \ No newline at end of file diff --git a/springboot/pom.xml b/springboot/pom.xml index c61ed20..340cbae 100644 --- a/springboot/pom.xml +++ b/springboot/pom.xml @@ -130,6 +130,12 @@ org.springframework.cloud spring-cloud-starter-netflix-eureka-server + + + com.baidu.aip + java-sdk + 4.12.0 + diff --git a/springboot/src/main/java/com/sincre/springboot/ApiModel/BaiduResult.java b/springboot/src/main/java/com/sincre/springboot/ApiModel/BaiduResult.java new file mode 100644 index 0000000..7b50884 --- /dev/null +++ b/springboot/src/main/java/com/sincre/springboot/ApiModel/BaiduResult.java @@ -0,0 +1,53 @@ +package com.sincre.springboot.ApiModel; +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_EMPTY) + +public class BaiduResult { + + public Boolean getSuccess() { + return success; + } + + public void setSuccess(Boolean success) { + this.success = success; + } + + public T getResult() { + return result; + } + + public void setResult(T result) { + this.result = result; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Long getT() { + return t; + } + + public void setT(Long t) { + this.t = t; + } + + private Boolean success; + private String code; + private String msg; + private Long t; + private T result; +} diff --git a/springboot/src/main/java/com/sincre/springboot/ApiPlatform/BaiduYunServiceConfig.java b/springboot/src/main/java/com/sincre/springboot/ApiPlatform/BaiduYunServiceConfig.java new file mode 100644 index 0000000..84d981d --- /dev/null +++ b/springboot/src/main/java/com/sincre/springboot/ApiPlatform/BaiduYunServiceConfig.java @@ -0,0 +1,7 @@ +package com.sincre.springboot.ApiPlatform; + +public class BaiduYunServiceConfig { + + public static String client_id = "76m2lnPOVEciXCOOdWR8VpR6"; + public static String client_secret = "AEEx5oPskk91SRc2Tjy3y7af5qszMN2B"; +} diff --git a/springboot/src/main/java/com/sincre/springboot/controller/BaiduController.java b/springboot/src/main/java/com/sincre/springboot/controller/BaiduController.java new file mode 100644 index 0000000..8cf2b31 --- /dev/null +++ b/springboot/src/main/java/com/sincre/springboot/controller/BaiduController.java @@ -0,0 +1,59 @@ +package com.sincre.springboot.controller; + + +import com.alibaba.fastjson.JSON; +import com.baidu.aip.util.Base64Util; +import com.sincre.springboot.ApiModel.BaiduResult; +import com.sincre.springboot.ApiModel.TuYaResResult; +import com.sincre.springboot.common.ServerResponse; +import com.sincre.springboot.utils.ApiHelper; +import com.sincre.springboot.utils.CacheHelper; +import com.sincre.springboot.utils.ResultUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping(value = "/Baidu/*") +@Api(tags = "百度云服务API调用") +public class BaiduController { + + @ApiOperation("根据上传的图片二进制数据进行切图") + @ApiImplicitParam(name="imgPostData",value = "图片二进制数据",required = true) + @GetMapping("general") + public static ServerResponse general(byte[] imgPostData) { + // 请求url + String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general"; + try { + byte[] imgData = imgPostData; + String imgStr = Base64Util.encode(imgData); + String imgParam = URLEncoder.encode(imgStr, "UTF-8"); + String param = "image=" + imgParam; + // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。 + String accessToken = CacheHelper.getBaiDuToken(); + Long t = System.currentTimeMillis(); + + Map headMap = new HashMap<>(); + headMap.put("Content-Type","application/x-www-form-urlencoded"); + + Map bodyMap = new HashMap<>(); + bodyMap.put("image",param); + bodyMap.put("t",t.toString()); + + String result = ApiHelper.doPost(url+accessToken,headMap,bodyMap); + BaiduResult baiduResult = JSON.parseObject(result,BaiduResult.class); + return ResultUtils.getInstance().returnResultBaidu(baiduResult); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/springboot/src/main/java/com/sincre/springboot/utils/CacheHelper.java b/springboot/src/main/java/com/sincre/springboot/utils/CacheHelper.java index 75b7725..5f90242 100644 --- a/springboot/src/main/java/com/sincre/springboot/utils/CacheHelper.java +++ b/springboot/src/main/java/com/sincre/springboot/utils/CacheHelper.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.sincre.springboot.ApiModel.TuYaResResult; import com.sincre.springboot.ApiModel.TuYaResTokenObj; +import com.sincre.springboot.ApiPlatform.BaiduYunServiceConfig; import com.sincre.springboot.ApiPlatform.TuYaCloudService; import com.sincre.springboot.ApiPlatform.YinShiServiceConfig; import com.sincre.springboot.common.EhcacheUtil; @@ -12,7 +13,13 @@ import org.json.JSONObject; import java.util.HashMap; import java.util.Map; - +import org.json.JSONObject; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.List; +import java.util.Map; public class CacheHelper { static EhcacheUtil ehcacheUtil = new EhcacheUtil(); @@ -131,4 +138,73 @@ public class CacheHelper { YinShiServiceConfig.AccessToken = data.optString("accessToken"); } + /** + * 获取权限token + * + * @return 返回示例: + * { + * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567", + * "expires_in": 2592000 + * } + */ + public static String getBaiDuToken() { + // 官网获取的 API Key 更新为你注册的 + String clientId = BaiduYunServiceConfig.client_id; + // 官网获取的 Secret Key 更新为你注册的 + String clientSecret = BaiduYunServiceConfig.client_secret; + return getAuth(clientId, clientSecret); + } + + /** + * 获取API访问token + * 该token有一定的有效期,需要自行管理,当失效时需重新获取. + * + * @param ak - 百度云官网获取的 API Key + * @param sk - 百度云官网获取的 Securet Key + * @return assess_token 示例: + * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567" + */ + public static String getAuth(String ak, String sk) { + + // 获取token地址 + String authHost = "https://aip.baidubce.com/oauth/2.0/token?"; + String getAccessTokenUrl = authHost + // 1. grant_type为固定参数 + + "grant_type=client_credentials" + // 2. 官网获取的 API Key + + "&client_id=" + ak + // 3. 官网获取的 Secret Key + + "&client_secret=" + sk; + try { + URL realUrl = new URL(getAccessTokenUrl); + // 打开和URL之间的连接 + HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection(); + connection.setRequestMethod("GET"); + connection.connect(); + // 获取所有响应头字段 + Map> map = connection.getHeaderFields(); + // 遍历所有的响应头字段 + for (String key : map.keySet()) { + System.err.println(key + "--->" + map.get(key)); + } + // 定义 BufferedReader输入流来读取URL的响应 + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String result = ""; + String line; + while ((line = in.readLine()) != null) { + result += line; + } + /** + * 返回结果示例 + */ + System.err.println("result:" + result); + JSONObject jsonObject = new JSONObject(result); + String access_token = jsonObject.getString("access_token"); + return access_token; + } catch (Exception e) { + System.err.printf("获取token失败!"); + e.printStackTrace(System.err); + } + return null; + } } diff --git a/springboot/src/main/java/com/sincre/springboot/utils/ResultUtils.java b/springboot/src/main/java/com/sincre/springboot/utils/ResultUtils.java index 0db99c9..fdd7a4c 100644 --- a/springboot/src/main/java/com/sincre/springboot/utils/ResultUtils.java +++ b/springboot/src/main/java/com/sincre/springboot/utils/ResultUtils.java @@ -3,6 +3,7 @@ package com.sincre.springboot.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; +import com.sincre.springboot.ApiModel.BaiduResult; import com.sincre.springboot.ApiModel.TuYaResResult; import com.sincre.springboot.ApiModel.YinShiResResult; import com.sincre.springboot.common.ResponseCode; @@ -93,4 +94,33 @@ public class ResultUtils { } } + /** + * 百度云返回结果 + * @param + * @return + */ + public ServerResponse returnResultBaidu(BaiduResult baiduResResult) { + try { + boolean success = baiduResResult.getSuccess(); + + if (success) { + //data 返回的是数组 + if(JSON.isValidArray(baiduResResult.getResult().toString())){ + int total; + JSONArray jsonArray = JSON.parseArray(baiduResResult.getResult().toString()); + total = jsonArray.size(); + return ServerResponse.createBySuccess(String.valueOf(total), ResponseCode.SUCCESS.getDesc(), baiduResResult.getResult()); + } + //data 返回的是对象 + return ServerResponse.createBySuccess(ResponseCode.SUCCESS.getDesc(), baiduResResult.getResult()); + } + + int code = Integer.valueOf(baiduResResult.getCode()); + return ServerResponse.createByErrorCodeMessage(code, baiduResResult.getMsg()); + } + catch (Exception ex){ + return ServerResponse.createByErrorMessage("服务器内部处理出错!"); + } + } + } -- libgit2 0.21.0