使用Java对接永中云编辑实现文档在线编辑
基于永中WebOffice的文档在线编辑能力,用户使用云编辑服务可在网页上直接编辑文档、实时保存修改内容,并且可以根据文件版本id恢复至任意历史版本。
首先要先成为开发者并且申请应用。在永中云服务平台首页(https://open.yozocloud.cn)点击”申请加入“填写信息,然后提交就好了。之后点击页面右上角的”管理中心“,点击”申请添加新应用“按钮申请应用,然后就获得了下图的appId和appKey。
文章图片
然后阅读云编辑开发文档。官网的开发文档里有编辑时要用到的所有接口,也给出了返回示例供参考,还有在使用过程中的遇到的常见问题也是做了总结。
文章图片
下面就是具体的接入步骤:
第一步:导入jar包生成签名。官网专门提供了几种流行编程语言的SDK,根据自己的开发语言下载对应的SDK及demo生成签名。这里使用的是JAVA SDK。
SDK下载地址:https://cms.yozocloud.cn/info/file/getResource/81
DEMO下载地址:https://cms.yozocloud.cn/info/file/getResource/82
public static String APPID = "XXXX";
public static String APPKEY = "XXXXXX";
public static String EDITFILE = "XXXXXX";
/**
* 获取签名信息
*
* @param map 参数k-v
* @return 签名
* @throws Exception 异常
*/
String getSign(Map map) throws Exception {
map.put("appId",new String[]{APPID});
AppAuthenticator authenticator=new UaaAppAuthenticator(UaaConstant.SIGN,null,UaaConstant.APPID);
String sign = authenticator.generateSign(APPKEY, map);
System.out.println("sign = " + sign);
return sign;
}
第二步:上传文件。这里我使用RestTemplate发送Post请求,要注意的是上传文件时文件类型一定要是multipartFile类型,否则会报错:message:服务器未知错误^_^。
Map params = new HashMap<>();
String sign = getSign(params);
String url = "http://dmc.yozocloud.cn/api/file/upload?appId={0}&sign={1}";
url = url.replace("{0}", APPID).replace("{1}", sign);
System.out.println("url:" + url);
//上传文件
String filePath = "C:";
String fileName = "11111.xlsx";
//设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("multipart/form-data"));
//文件类型是multipartFile类型//设置请求体,注意是LinkedMultiValueMap
FileSystemResource fileSystemResource = new FileSystemResource(filePath + "/" + fileName);
MultiValueMap form = new LinkedMultiValueMap<>();
form.add("file", fileSystemResource);
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(form, headers), String.class);
//防止返回信息乱码
System.out.println("返回信息为: " + response.getBody());
//获取返回信息
【使用Java对接永中云编辑实现文档在线编辑】第三步:获取编辑地址。每次调用接口时,用到了哪些参数就将这些参数去生成sign,multipartFile除外,用不到的参数也不要传null或者空字符串。
JSONObject data = https://www.it610.com/article/JSONObject.parseObject(response.getBody()).getJSONObject("data");
String fileVersionId = data.getString("fileVersionId");
//获取返回的fileVersionId
Map paramMap = new HashMap<>();
paramMap.put("fileVersionId", new String[]{fileVersionId});
String s = getSign(paramMap);
//生成签名
System.out.println("编辑地址:" + DEITFILE + "?appId=" + APPID + "&fileVersionId=" + fileVersionId + "&sign=" + s);
//获取编辑地址
最后,运行程序就可以得到编辑地址。
文章图片
下面是源文档和使用云编辑编辑文档的对比:
源文档:
文章图片
云编辑:
文章图片
注意:
1.用户须在云编辑的开发信息中填写正确的数据回调地址来接收新的文件版本id,并且在数据回调URL下新增一个POST接口,接口名称设置为:/3rd/edit/callBack,接口接收转换回调数据代码示例如下:
文章图片
2.云编辑是实时保存的,在关闭编辑页面或者编辑页面30分钟没有任何操作都是会触发回调的;
3.云编辑不支持多人协作,如果在编辑的同时可以查看文档可以使用参数“autoReader=true”来控制只读,但查看的文档是编辑之前的文档并不能看到实时编辑的内容;
4.在访问编辑页面的时候直接访问拼接地址就可以,访问重定向链接的话会提示“加入编辑失败,您无权限编辑此文档或会话已失效”。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- iOS中的Block