# 文件上传
先获取文件上传权限,再上传文件。可用于其他业务参数(以fs:开头)。
# 一、请求说明
请求地址:http://api.spiderid.cn/api/router/rest,https://api.spiderid.cn/api/router/rest
服务接口名称(即公共参数method的值): biz.fs.uploadPolicy
请求方式:GET,POST
# 二、请求参数
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
bizType | String | 是 | 业务类型 |
字段解释
bizType 类型介绍
类型字段 | 类型介绍 |
---|---|
ocr | OCR业务 |
liveness_video | 视频活体业务 |
liveness_image | 静态图片活体业务 |
face | 人脸对比业务 |
请求示例:
https://api.spiderid.cn/api/router/rest?
&bizType=XXX
&<[公共请求参数]>
# 三、响应参数
data 结果信息 | 类型 | 描述 |
---|---|---|
uploadUrl | String | 上传地址 |
token | String | 验证令牌 |
expireSeconds | String | 上传操作时间(秒) |
objectKey | String | 上传对象的key |
dir | String | 上传目录 |
# 四、成功示例
JSON示例
{
"code": 0,
"requestId":"dsd24...",
"message": "success",
"data": {
"uploadUrl":"http://fs.unitid.cn/livess-auth",
"token":"bIHeY2BDQz21XwXD98QwjhnqRGjkuUVh",
"expireSeconds":1540816434718,
"objectKey":"sYYACWjpE26bmbZK/2018/10/30/9ddf47709afe476c8c9c9dd75633e083",
"dir":"sYYACWjpE26bmbZK/2018/10/30/"
}
}
# 五、失败示例
JSON示例
{
"code": 10008,
"requestId":"b0c26c...",
"message": "App不存在或状态异常"
}
# 六、文件上传
- Upload Url: http://fs.unitid.cn/livess-auth
- Http Method: POST
- 参数1: token
- 参数2: key
- 参数3: file
Postman:
响应:
{
"bucket": "livess-auth",
"uploadDate": 1540867967818,
"objectKey": "sYYACWjpE26bmbZK/2018/10/30/9ddf47709afe476c8c9c9dd75633e083.jpg",
"length": 1298667,
"contentType": "image/jpeg",
"md5": "dbfb73a223c9c31b017c959a0b957820"
}
# SDK 请求示例
//提供的url
String url = "http://api.spiderid.cn/api/router/rest";
//您的appKey
String appkey = "XXX";
//您的appSecret
String secretKey = "XXX";
//业务类型
String bizType = "XXX";
//1.默认客户端
ApiClient apiClient = new DefaultApiClient(url, appkey, secretKey);
//2.调用出错自动重试客户端
//AutoRetryApiClient apiClient = new AutoRetryApiClient(url, appkey, secretKey);
FsUploadPolicyRequest req = new FsUploadPolicyRequest();
req.setBizType(bizType);
try {
//获取文件上传权限
FsUploadPolicyResponse fsResponse = apiClient.execute(req);
//获取权限失败
if (null == fsResponse.getData()) {
throw new ApiException();
}
//获取权限成功,上传文件示例
Map<String, String> params = new HashMap<String, String>(5);
params.put("token", fsResponse.getData().getToken());
//以/结尾,可以上传多文件
if (fsResponse.getData().getObjectKey().endsWith("/")) {
params.put("key", fsResponse.getData().getObjectKey() + "${filename}");
} else {
//不以/结尾只能上传单文件
params.put("key", fsResponse.getData().getObjectKey());
}
//需要上传的文件
Map<String, FileItem> fileParams = new HashMap<String, FileItem>(5);
// //base64字符串
// String baset64String = FileUtils.readFileToString(new File("C:\\workspace\\real-identity-openapi-java-sdk\\src\\test\\resources\\data\\cwb.txt"), "utf-8");
// fileParams.put("file", new FileItem("uu.jpg", Base64.decodeBase64(baset64String)));
fileParams.put("file", new FileItem(new File("C:\\workspace\\real-identity-openapi-java-sdk\\src\\test\\resources\\data\\uu.jpg")));
// // 当公共参数encMethod=SM4时,上传的文件也要进行加密
// // 获取文件流
// File file = new File("C:\\workspace\\real-identity-openapi-java-sdk\\src\\test\\resources\\data\\uu.jpg");
// byte[] content = FileUtils.readFileToByteArray(file);
// // 对文件进行加密
// byte[] encryptContent = Sm4Utils.encrypt(content, DefaultApiClient.encPassword);
// String fileName = file.getName();
// fileParams.put("file", new FileItem(fileName, encryptContent, FileContentTypeUtils.mimeTypeByFilename(fileName))); //上传
String json = WebUtils.doPost(fsResponse.getData().getUploadUrl(), params, fileParams, 5000, 30000);
JSONObject jsonObject = JSON.parseObject(json);
//上传失败
if (null == jsonObject.getString("objectKey")) {
throw new ApiException();
}
//上传成功,后续业务处理 如图片OCR识别支持fs路径,
OcrRecognitionRequest ocrReq = new OcrRecognitionRequest();
ocrReq.setImageType("IDCARD");
String imgFs = jsonObject.getString("bucket") + ":" + jsonObject.getString("objectKey");
ocrReq.setImageFs(imgFs);
// 配置此参数时,会对请求参数中的image和响应结果中info属性做加密
// req.setEncMethod(EncryptMethod.SM4);
OcrRecognitionResponse response = apiClient.execute(ocrReq);
} catch (ApiException e) {
e.printStackTrace();
}