乐趣区

关于java:使用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<String,String[]> 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<String, String[]> 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<String, Object> form = new LinkedMultiValueMap<>();
      form.add("file", fileSystemResource);

      RestTemplate restTemplate = new RestTemplate();
      restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
      ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(form, headers), String.class);// 避免返回信息乱码
      System.out.println("返回信息为:" + response.getBody());// 获取返回信息 

第三步:获取编辑地址。每次调用接口时,用到了哪些参数就将这些参数去生成 sign,multipartFile 除外,用不到的参数也不要传 null 或者空字符串。

JSONObject data = JSONObject.parseObject(response.getBody()).getJSONObject("data");
String fileVersionId = data.getString("fileVersionId");// 获取返回的 fileVersionId
Map<String, String[]> 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. 在拜访编辑页面的时候间接拜访拼接地址就能够,拜访重定向链接的话会提醒“退出编辑失败,您无权限编辑此文档或会话已生效”。

退出移动版