原文同步自作者博客:https://www.daxueyiwu.com/post/706

springboot实现的onlyoffice协同编辑网盘项目可以去作者博客。

上代码:

//新建报告@GetMapping("report/createReport")public String CreatReport(HttpServletRequest request,String memo,String reportName,Model model){String type = request.getParameter("type");String reportCategory = request.getParameter("reportCategory");String reportCategoryName = request.getParameter("reportCategoryName");String nowTime = DateUtil.getNowDateHm();model.addAttribute("type",type);model.addAttribute("reportCategory",reportCategory);model.addAttribute("reportCategoryName",reportCategoryName);model.addAttribute("memo",memo);model.addAttribute("reportName",reportName);model.addAttribute("nowTime",nowTime);return "report/newReport";}@Value("${xmleditor.onlyoffice_address}")private String docserviceApiUrl;//onlyoffice新建报告(空白|模板)@GetMapping(value = "/report/createReportForOnlyoffice")public String createReportForOnlyoffice(HttpServletRequest request, HttpServletResponse response,Model model) {String UserCode = SessionHelper.GetLoginUserCode();User loginUser = userRepository.getByName(UserCode);String fileName = UuidUtil.getUUID()+".docx";String reportName= request.getParameter("reportName");String HfsKey = request.getParameter("hfsKey");String baseUrl = request.getScheme()+"://"+ request.getServerName()+":"+request.getServerPort()+request.getContextPath();String getOnlyofficeUrl = baseUrl+"/report/getOfficeFile?filename=";OnlyofficeFileModel file = new OnlyofficeFileModel(loginUser,reportName,HfsKey,getOnlyofficeUrl,modelConf.getFileExistUrl(),modelConf.getUploadImgUrl(),"edit");String serverPath = request.getScheme() +"://"+ request.getServerName()+":" + request.getServerPort() + request.getContextPath();String query = null;try {query = "?type=track&fileName=" + URLEncoder.encode(fileName, java.nio.charset.StandardCharsets.UTF_8.toString())+"&reportName="+request.getParameter("reportName")+"&memo="+request.getParameter("memo")+"&doctype="+request.getParameter("type")+"&UserCode="+UserCode+"&hfsKey="+request.getParameter("hfsKey")+"&reportCategory="+request.getParameter("reportCategory");} catch (UnsupportedEncodingException e) {e.printStackTrace();}file.editorConfig.callbackUrl= serverPath + "/IndexServlet" + query;model.addAttribute("file",file);model.addAttribute("docserviceApiUrl",docserviceApiUrl);model.addAttribute("reportName",reportName);return "report/newReport1";}//查看报告@GetMapping(value = "/report/showReportForOnlyoffice")public String showReportForOnlyoffice(HttpServletRequest request, HttpServletResponse response,Model model) {String UserCode = SessionHelper.GetLoginUserCode();User loginUser = userRepository.getByName(UserCode);String fileName = request.getParameter("fileName");String HfsKey = request.getParameter("hfsKey");String baseUrl = request.getScheme()+"://"+ request.getServerName()+":"+request.getServerPort()+request.getContextPath();String getOnlyofficeUrl = baseUrl+"/report/getOfficeFile?filename=";OnlyofficeFileModel file = new OnlyofficeFileModel(loginUser,fileName,HfsKey,getOnlyofficeUrl,modelConf.getFileExistUrl(),modelConf.getUploadImgUrl(),"view");String serverPath = request.getScheme() +"://"+ request.getServerName()+":" + request.getServerPort() + request.getContextPath();String query = "?type=show";file.editorConfig.callbackUrl= serverPath + "/IndexServlet" + query;model.addAttribute("file",file);model.addAttribute("reportName",fileName);model.addAttribute("docserviceApiUrl",docserviceApiUrl);return "report/newReport1";}//编辑报告@GetMapping(value = "/report/editReportForOnlyoffice")public String editReportForOnlyoffice(HttpServletRequest request, HttpServletResponse response,Model model) {String id = request.getParameter("id");String HfsKey = request.getParameter("hfsKey");String fileName = request.getParameter("fileName");String UserCode = SessionHelper.GetLoginUserCode();User loginUser = userRepository.getByName(UserCode);String baseUrl = request.getScheme()+"://"+ request.getServerName()+":"+request.getServerPort()+request.getContextPath();String getOnlyofficeUrl = baseUrl+"/report/getOfficeFile?filename=";OnlyofficeFileModel file = new OnlyofficeFileModel(loginUser,fileName,HfsKey,getOnlyofficeUrl,modelConf.getFileExistUrl(),modelConf.getUploadImgUrl(),"edit");String serverPath = request.getScheme() +"://"+ request.getServerName()+":" + request.getServerPort() + request.getContextPath();String query = null;try {query = "?type=edit&fileName=" + URLEncoder.encode(fileName, java.nio.charset.StandardCharsets.UTF_8.toString())+"&doctype="+request.getParameter("type")+"&id="+id+"&UserCode="+UserCode+"&hfsKey="+HfsKey;} catch (UnsupportedEncodingException e) {e.printStackTrace();}file.editorConfig.callbackUrl= serverPath + "/IndexServlet" + query;model.addAttribute("file",file);model.addAttribute("reportName",fileName);model.addAttribute("docserviceApiUrl",docserviceApiUrl);return "report/newReport1";}@GetMapping("/report/getOfficeFile")public void getHfsFile(HttpServletRequest request, HttpServletResponse response) {String url = "";try {String fileName = request.getParameter("filename");url = modelConf.getGetImgUrl() + fileName;if (StringUtil.isNotBlank(fileName)) {HttpClientHelper.getInstance().httpDownloadOfficeFile(url, response);} else {OutputStream toClient = response.getOutputStream();toClient.write("the filename is empty".getBytes());toClient.flush();}} catch (Exception e) {e.printStackTrace();log.error("文件获取失败,url:{}", url);}}@Autowiredprivate FileUploadConfig fileUploadConfig;@RequestMapping(value = "/IndexServlet", method = RequestMethod.POST)@ResponseBodypublic void IndexServlet(HttpServletResponse response, HttpServletRequest request) throws IOException, ParseException {PrintWriter writer = null;JSONObject jsonObj=null;System.out.println("===saveeditedfile------------");try {writer = response.getWriter();Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\\A");String body = scanner.hasNext() ? scanner.next() : "";jsonObj = (JSONObject) new JSONParser().parse(body);System.out.println("===saveeditedfile:" + jsonObj.get("status")) ;if ((long) jsonObj.get("status") == 6) {//新建报告(long) jsonObj.get("status") == 2||String type = request.getParameter("type");if("track".equals(type)){String downloadUri = (String) jsonObj.get("url");System.out.println("====文档编辑完成,现在开始保存编辑后的文档,其下载地址为:" + downloadUri);String fileName = request.getParameter("fileName");System.out.println("====下载的文件名:" + fileName);String reportName = request.getParameter("reportName");String doctype = request.getParameter("doctype");String memo = request.getParameter("memo");String reportCategory = request.getParameter("reportCategory");String UserCode = request.getParameter("UserCode");URL url = new URL(downloadUri);java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();InputStream stream = connection.getInputStream();File savedFile = new File(fileUploadConfig.getSavePath()+fileName);try (FileOutputStream out = new FileOutputStream(savedFile)) {int read;final byte[] bytes = new byte[1024];while ((read = stream.read(bytes)) != -1) {out.write(bytes, 0, read);}out.flush();}connection.disconnect();//上传到hfsMap<String, String> map = new HashMap<String, String>();map.put("filename", fileName);try {HttpClientHelper.getInstance().uploadFileImpl(modelConf.getUploadImgUrl(), fileUploadConfig.getSavePath()+fileName, fileName, map);} catch (Exception e) {e.printStackTrace();throw new RuntimeException("上传文件失败");}//保存到表中 报告if("report".equals(doctype)){/*添加报告*/Report report = new Report();int flag_add = 0;//report.setReportContentID(bookId);report.setReportXML("");//预留字段report.setReportCode("");//预留字段report.setReportName(reportName);report.setReportCategoryID(Integer.parseInt(reportCategory));report.setStatus(1);report.setMemo(memo);report.setCreateUser(UserCode);Date day=new Date();report.setCreateTime(day);report.setHfsKey(fileName.substring(0,fileName.length()-5));flag_add = reportService.addReportOnlyoffice(report);}else if("reportTemplet".equals(doctype)){/*添加报告模板*/ReportTemplet reportT = new ReportTemplet();int flag_add = 0;//reportT.setReportContentID(bookId);reportT.setReportTempletXML("");//预留字段reportT.setReportTempletCode("");//预留字段reportT.setReportTempletName(reportName);reportT.setReportCategoryID(Integer.parseInt(reportCategory));reportT.setStatus(1);reportT.setMemo(memo);reportT.setCreateUser(UserCode);reportT.setHfsKey(fileName.substring(0,fileName.length()-5));Date day=new Date();reportT.setCreateTime(day);flag_add = reportTempletService.addReportTempletOnlyOffice(reportT);}}else if("show".equals(type)){//查看报告System.out.println("====只查看不保存:");}else if("edit".equals(type)){//修改报告String downloadUri = (String) jsonObj.get("url");System.out.println("====文档编辑完成,现在开始保存编辑后的文档,其下载地址为:" + downloadUri);String doctype = request.getParameter("doctype");String UserCode = request.getParameter("UserCode");String HfsKey = request.getParameter("hfsKey");String id = request.getParameter("id");String fileName = HfsKey+".docx";URL url = new URL(downloadUri);java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();InputStream stream = connection.getInputStream();File savedFile = new File(fileUploadConfig.getSavePath()+fileName);try (FileOutputStream out = new FileOutputStream(savedFile)) {int read;final byte[] bytes = new byte[1024];while ((read = stream.read(bytes)) != -1) {out.write(bytes, 0, read);}out.flush();}connection.disconnect();//上传到hfsMap<String, String> map = new HashMap<String, String>();map.put("filename", fileName);try {HttpClientHelper.getInstance().uploadFileImpl(modelConf.getUploadImgUrl(), fileUploadConfig.getSavePath()+fileName, fileName, map);} catch (Exception e) {e.printStackTrace();throw new RuntimeException("上传文件失败");}//保存到表中 报告if("report".equals(doctype)){/*添加报告*/Report report = reportService.getByID(Integer.valueOf(id));int flag_up = 0;report.setModifyUser(UserCode);Date day=new Date();report.setModifyTime(day);report.setStatus(1);//修改后需要重新发布flag_up = reportService.updateReportInfo(report);}else if("reportTemplet".equals(doctype)){/*添加报告模板*/ReportTemplet reportT = reportTempletService.getByID(Integer.valueOf(id));int flag_up = 0;reportT.setModifyUser(UserCode);Date day=new Date();reportT.setModifyTime(day);reportT.setStatus(1);//修改后需要重新发布flag_up = reportTempletService.updateReportTempletInfo(reportT);}}}}catch (IOException e) {e.printStackTrace();} catch (ParseException e) {e.printStackTrace();}if((long) jsonObj.get("status") == 3||(long) jsonObj.get("status") == 7) {System.out.println("====保存失败:");writer.write("{\"error\":1}");}else {writer.write("{\"error\":" + "0" + "}");}}

如有其他疑问可加入Q群,共同探讨:

onlyoffice交流群

1群将满可加2群【onlyoffice交流群2】:https://jq.qq.com/?_wv=1027&k=2uSJJPfr

onlyoffice回调函数controller方式实现相关推荐

  1. dva中dispatch函数实现异步回调函数的方式

    #关于 dva中dispatch函数实现异步回调函数的方式 1.通过promise函数实现 这里先给出index.js 和modal模块的实现 services模块不需要做处理 //index.jsi ...

  2. C语言学习及应用笔记之七:C语言中的回调函数及使用方式

    我们在使用C语言实现相对复杂的软件开发时,经常会碰到使用回调函数的问题.但是回调函数的理解和使用却不是一件简单的事,在本篇我们根据我们个人的理解和应用经验对回调函数做简要的分析. 1.什么是回调函数 ...

  3. 观察者设计模式二:回调函数

    在上篇博客中具体介绍了观察者设计模式在异步短信发送中的应用场景,但是,在具体的业务中短息发送使用那种方式则会令代码很不友好: 这里我使用的是回调函数的方式来实现这个业务需求: 在具体的业务场景中,我们 ...

  4. c++ 传入回调函数 参数没有传入_一文读懂回调函数

    1 什么是回调函数? 来自公众号:C语言与cpp编程 首先什么是"回调"呢? 我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回 ...

  5. Linux C 函数指针应用---回调函数

    (这里引用了知乎上一些知友的回答,感觉不错,有助于理解,这里引用作为借鉴,如有冒犯,烦请告知) 我们先来回顾一下函数指针,函数指针是专门用来存放函数地址的指针,函数地址是一个函数的入口地址,函数名代表 ...

  6. C++回调函数(callback)的使用

    什么是回调函数(callback)      模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什 ...

  7. typedef函数指针_C语言函数指针之回调函数

    1 什么是回调函数? 首先什么是"回调"呢? 我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调. 如果代码立即被执行就称为同 ...

  8. Linux C 函数指针应用---回调函数

    (这里引用了知乎上一些知友的回答,感觉不错,有助于理解,这里引用作为借鉴,如有冒犯,烦请告知) 我们先来回顾一下函数指针,函数指针是专门用来存放函数地址的指针,函数地址是一个函数的入口地址,函数名代表 ...

  9. lwIP 细节之三:TCP 回调函数是何时调用的

    使用 lwIP 协议栈进行 TCP 裸机编程,其本质就是编写协议栈指定的各种回调函数.将你的应用逻辑封装成函数,注册到协议栈,在适当的时候,由协议栈自动调用,所以称为回调. 注:除非特别说明,以下内容 ...

最新文章

  1. H3 BPM微信接入配置
  2. 【网址收藏】Percona-xtraDB-cluster的安装、配置和使用 PXC
  3. PHP调用tushare,python调用tushare获取沪股通、深股通成份股数据
  4. Restrictions查询用法
  5. codeforces1493 D. GCD of an Array(数论)
  6. jQuery的实现原理和核心
  7. “编程能力差,90%输在了这点上!”阿里巴巴工程师:其实都是瞎努力!
  8. HOOK大法实现不修改程序代码给程序添加功能
  9. 获取浏览器信息 c#
  10. 深入解析Windows操作系统之基础概念和术语
  11. backgroundworker与Thread区别
  12. MybatisPlus学习笔记
  13. python字符串格式化是什么意思_Python字符串格式化中%s和%d之间有什么区别?...
  14. android 模拟下雪的效果
  15. java基础程序设计
  16. 公式宝典之颜色混合模式公式
  17. node安装不能正常使用 Error: ENOENT: no such file or directory, mkdir ‘D:\‘
  18. 如何把自定义word模板加入到word中我的模板里面
  19. 手机游戏推广的五个步骤
  20. (十)linux内核时钟

热门文章

  1. RabbitMQ 处理过慢,原来是一个 SQL 缓存框架导致的 GC 频繁触发
  2. 基于事件驱动架构构建微服务第9部分:处理更新
  3. Dapr牵手.NET学习笔记:发布-订阅
  4. Blazor 应用如何使用 Azure Active Directory 认证登录
  5. Hello Blazor:(9)Source Generators生成导航菜单
  6. NET问答: 如何在 dynamic 集合上使用 Linq ?
  7. .Net Core with 微服务 - Consul 注册中心
  8. 祝福!微软 46 周年生日快乐!
  9. 在 C# 中生成代码的四种方式——包括.NET 5中的Source Generators
  10. efcore技巧贴-也许有你不知道的使用技巧