当前位置:   article > 正文

OnlyOffice基础实践

onlyoffice api地址

一:概述

onlyoffice是做什么用的在这里就不做解释了,能看到这篇博客的我相信都是了解的,本文主要讲解onlyoffice在使用过程中要注意的问题。

使用环境:window10 + VMware Workstation Pro14 + CentOS-7-x86_64-Minimal + Docker 18.03.1-ce + onlyoffice

onlyoffice官网:https://www.onlyoffice.com/
onlyoffice API: https://api.onlyoffice.com/editors/basic

onlyoffice API要着重看下,里面阐述了onlyoffice的运行原理,同时里面有基于多种语言的样例代码,基本理解onlyoffice的运行原理后再结合样例代码验证必能事半功倍。在这首先阐述下API中设计到的几个概念:
1,document manager : 文档管理器,等同于一个界面中的文件列表,该列表就是文档管理器【我们自己编写,不一定需要】。
2,document storage service :文档存储服务,即管理文档存放的模块,很多时候就是我们上传文件然后将其保存在服务器上,网上也有使用nextcloud作为存储的【我们自己编写或使用存储文件的软件】。
3,document editor : 文档编辑器,就是文档编辑窗口【onlyoffice提供的前端页面插件】
4,document editing service : 文档编辑服务,从文档存储服务获取要编辑的文档,转换成Office OpenXML格式后传给文档编辑器,编辑期间文档编辑器与文档编辑服务长期交互【onlyoffice提供的后台服务】

二:实践(基于样例代码)
首先从官网下载基于java开发的样例代码“Java Example.zip”,该代码是使用maven构建的webapp,在webapp目录下有两个文件“index.jsp”和"editor.jsp"; 同时在resources目录下有个setting.properties配置文件,这三个文件是我们首先要着重看的地方。

如果index.jsp能顺利运行起来,那界面应该是这样的:
OnlyOffice基础实践

首先我们可以点击“Choose file”按钮上传一个要编辑的文件,这时会调用 controllers.IndexServlet中的doPost方法。其处理方法为:

  1. protected void proce***equest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  2. {
  3. String action = request.getParameter("type");
  4. if(action == null) {
  5. request.getRequestDispatcher("index.jsp").forward(request, response);
  6. return;
  7. }
  8. DocumentManager.Init(request, response);
  9. PrintWriter writer = response.getWriter();
  10. switch (action.toLowerCase())
  11. {
  12. case "upload":
  13. Upload(request, response, writer);
  14. break;
  15. case "convert":
  16. Convert(request, response, writer);
  17. break;
  18. case "track":
  19. Track(request, response, writer);
  20. break;
  21. }
  22. }
  23. private static void Upload(HttpServletRequest request, HttpServletResponse response, PrintWriter writer)
  24. {
  25. response.setContentType("text/plain");
  26. try
  27. {
  28. Part httpPostedFile = request.getPart("file");
  29. String fileName = "";
  30. for (String content : httpPostedFile.getHeader("content-disposition").split(";"))
  31. {
  32. if (content.trim().startsWith("filename"))
  33. {
  34. fileName = content.substring(content.indexOf('=') + 1).trim().replace("\"", "");
  35. }
  36. }
  37. long curSize = httpPostedFile.getSize();
  38. if (DocumentManager.GetMaxFileSize() < curSize || curSize <= 0)
  39. {
  40. writer.write("{ \"error\": \"File size is incorrect\"}");
  41. return;
  42. }
  43. String curExt = FileUtility.GetFileExtension(fileName);
  44. if (!DocumentManager.GetFileExts().contains(curExt))
  45. {
  46. writer.write("{ \"error\": \"File type is not supported\"}");
  47. return;
  48. }
  49. InputStream fileStream = httpPostedFile.getInputStream();
  50. fileName = DocumentManager.GetCorrectName(fileName);
  51. //文件保存路径
  52. String fileStoragePath = DocumentManager.StoragePath(fileName, null);
  53. File file = new File(fileStoragePath);
  54. try (FileOutputStream out = new FileOutputStream(file))
  55. {
  56. int read;
  57. final byte[] bytes = new byte[1024];
  58. while ((read = fileStream.read(bytes)) != -1)
  59. {
  60. out.write(bytes, 0, read);
  61. }
  62. out.flush();
  63. }
  64. writer.write("{ \"filename\": \"" + fileName + "\"}");
  65. }
  66. catch (IOException | ServletException e)
  67. {
  68. writer.write("{ \"error\": \"" + e.getMessage() + "\"}");
  69. }
  70. }

深入的不在阐述,经过几番周折后,最终是将文件保存在硬盘上。这个上传操作在实际应用onlyoffice的项目中也应该会有,实现方法和存放的路径根据实际调整即可。

上传过程界面如下:
OnlyOffice基础实践

当点击“Edit”按钮后,将会通过EditorServlet跳转到“editor.jsp页面”,并将需要的参数传递过去。其中关键的代码为

  1. docEditor = new DocsAPI.DocEditor("iframeEditor",
  2. {
  3. width: "100%",
  4. height: "100%",
  5. type: "${type}",
  6. documentType: "<%= Model.GetDocumentType() %>",
  7. document: {
  8. title: fileNam
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/475912
推荐阅读
相关标签
  

闽ICP备14008679号