一、前端

onlyoffice使用

页面引用
<head><script type="text/javascript" src="http://192.168.58.138:9001/web-apps/apps/api/documents/api.js"></script>
</head>
<body><div id="placeholder"></div>
</body>
加载文档
var docEditor = new DocsAPI.DocEditor("placeholder", {//placeholder为要放入的位置"document" : {"fileType": "docx",//文件类型"key": "EF12KFF",//docserver会通过key读取缓存,如果文档进行修改要修改key值"title": "测试文档",//显示文档标题"url": "http://192.168.0.1:8080/test/onlyoffice/onlyofficeLoad"//可以为静态地址,也可为方法地址},"documentType": "text",//onlyoffice可打开word、excel、ppt=="editorConfig": {"callbackUrl": "",//回调地址,一定要保证docserver可以请求到,否则开不开文件"lang": "zh-CN","mode": "view",//只读view,编辑edit"permissions":{"comment": false,//是否可以评论"download": false,//是否可以下载"edit": true,//是否可以编辑"fillForms": true,//"print": false,//是否可以打印"review": true//}});
后台方法

url:获取文件的请求,使用以下方法返回要打开的文件流

@RequestMapping(value = "/onlyofficeLoad")
@ResponseBody
public void onlyofficeLoad(HttpServletRequest request, HttpServletResponse response){response.reset();fileName = URLEncoder.encode(fileName, "UTF-8");fileName = fileName.replaceAll("\\+", "%20");response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"; " + "filename*=UTF-8''" + fileName);response.setCharacterEncoding("UTF-8");response.setContentType("application/octet-stream");//注意类型一定要是octet-streamresponse.setContentLength(inputStream.available());OutputStream sos = response.getOutputStream();byte[] bytes = new byte[1024 * 512];int i = -1;while ((i = inputStream.read(bytes)) != -1){sos.write(bytes, 0, i);}sos.flush();StreamUtils.closeStream(inputStream);
}

callbackUrl:当文件打开或关闭都会调用改方法(文件关闭会在10秒后发送请求)

@RequestMapping(value = "/generateReport", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
@ResponseBody
public void generateReport(HttpServletRequest request, HttpServletResponse response){PrintWriter writer = null;try{String body = "";try{writer = response.getWriter();Scanner scanner = new Scanner(request.getInputStream());scanner.useDelimiter("\\A");body = scanner.hasNext() ? scanner.next() : "";scanner.close();} catch (Exception ex) {writer.write("get request.getInputStream error:" + ex.getMessage());return;}if (body.isEmpty()) {writer.write("empty request.getInputStream");return;}JSONParser parser = new JSONParser();JSONObject jsonObj = (JSONObject) parser.parse(body);int status = Integer.parseInt(jsonObj.get("status").toString());int saved = 0;//statusAPI见下表if (status == 2 || status == 3 || status == 6) {String downloadUri = (String) jsonObj.get("url");try {URL url = new URL(downloadUri);java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();InputStream stream = connection.getInputStream();if (stream == null){throw new Exception("Stream is null");}filePath = "";File fileDir = new File(filePath);if (!fileDir.isDirectory()){fileDir.mkdirs();}File savedFile = new File(upload_file_path + filePath + fileName);if (savedFile.exists()) {savedFile.delete();}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();} catch (Exception ex){saved = 1;ex.printStackTrace();}}writer.write("{\"error\":" + saved + "}");System.out.println("保存成功");} catch (ParseException e) {System.out.println("保存异常");writer.write("{\"error\":\"-1\"}");e.printStackTrace();}
}

注:上述代码逻辑不可改变,docserver会根据writer.write()对文件进行操作。

回调的status共有6种,仅当状态为2,3,6时会去保存文件
status
1 正在编辑文件,
2 文件已准备好保存,
3 发生文件保存错误,
4 文件已关闭且未做任何更改,
6 正在编辑文档,但保存了当前文档状态,
7 强制保存文档时发生错误。

————————————————
版权声明:本文为CSDN博主「学习要趁早z」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42677452/article/details/116197517

onlyoffice使用,前端+java相关推荐

  1. java mysql物联网土壤智能监控web前端+java后台+数据接程序

    博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 java mysql物联网土壤智能监控web前端+java后台+数据接程序 视频效 ...

  2. flex前端+java后台实现Flex导出Excel的两种方法,

    Flex前端+Java后台,要将Flex界面中AdvancedDataGrid的数据导出成Excel文件.有2种方法: 1.直接在前台导出.      使用开源项目as3xls,下载个解决了中文乱码的 ...

  3. 2023全新借贷APP系统源码全开源/独立Uni前端+JAVA后端开发

    正文: Uni前端+JAVA开发的,UI挺漂亮的,有兴趣的自行去安装体验吧,其它的就没什么好介绍的了. 程序: wwejdo.lanzoum.com/ijlVy0szvdkd 图片:

  4. 那些年,我的前端/Java后端书单

    全文为这些年,我曾阅读.深入理解过(或正在阅读学习.即将阅读)的一些优秀经典前端/Java后端书籍.全文为纯原创,且将持续更新,未经许可,不得进行转载.当然,如果您喜欢这篇文章,可以动手点点赞或者收藏 ...

  5. 前端,java后端开发,数据分析师应该掌握的技术,不要盲目跟风

    不知道大家有没有关注程序员的就业环境问题,疫情开放以来,按理来说就业市场应当是处于回暖状态的,并且如今金三银四黄金时期应该是很好找工作的,但是身边求职的朋友都说不好就业. 根据 Stack Overf ...

  6. 垃圾分类网站 web前端 + java后端

    数据库设计 垃圾分类知识表: 字段名称 数据类型 id(唯一标识) BIGINT(20) title(名称) VARCHAR(255) image(图片) VARCHAR(255) content(介 ...

  7. Web前端+Java实现人脸识别登录

    使用前端页面+java后台实现人脸登录,人脸的图像对比是调用的百度接口(百度AI开放平台). 一.实现思路 a.前端页面调用设备摄像头获取实时图片数据. b.通过Ajax将图片数据提交后台处理,并返回 ...

  8. php前端java后端开发_java是前端还是后端

    java是前端还是后端 对于java来讲那个以后发展的会更好 java是前端还是后端这个问题问的其实并没有什么技术含量,但是出于还有很多的朋友对于java还不是很熟悉,对于在作java后端还要懂前端的 ...

  9. java获取服务器信息返回前端,java程序获取linux服务器进程信息

    搜索了很多关于获取Linux的信息,但是没有发现获取linux服务器的进程信息详细说明. 在这里求解一下,能否在java代码中实现读取代码执行的本机linux服务器中的进程信息? 该问题又分为三个小问 ...

最新文章

  1. spring boot(二):web综合开发
  2. LeetCode Longest Valid Parentheses
  3. mysql主从复制超简单,mysql简单主从复制
  4. 摩象科技获数千万元的A+轮融资,投资方为北极光创投
  5. 简单理解JavaScript中的闭包
  6. C# MD5算法实现对文件校验
  7. mysql卸载不_mysql卸载不干净解决方法
  8. 10 craps赌博游戏
  9. Java+Springmvc+velement实现高校学科竞赛项目系统+Lw
  10. 5G多卡聚合路由器在高速公路收费中的应用
  11. 企业微信裂变获客,粉丝增长的优势在哪?
  12. 【IOS每日限免】1月17号最新IOS每日限免信息来啦!
  13. ubuntu18.04 安装Adobe Flash Player
  14. vue3 + element-plus组件的国际化
  15. 谈谈软件开发项目管理的积分制
  16. C# 2.0 泛型编程
  17. Flutter开发桌面应用
  18. Peter Meer
  19. java 中输入字符的方法(顺便判断元音辅音)
  20. 八维计算机学校死人,八维计算机学校教您使用联想一键恢复

热门文章

  1. JS中0和false的比较
  2. storm显微镜成像原理_STORM 超分辨显微成像 – Prime 95B 应用
  3. 非参数检验之K-S检验
  4. 华为mate50os鸿蒙,华为Mate50将如期发布,屏下镜头+鸿蒙OS。
  5. 华为matebook重装系统后,指纹模块失效,无法识别指纹设备,华为电脑管家无法解决
  6. 如何区分显卡的好坏?
  7. EaseUS Data Recovery Wizard Technician数据恢复软件安装
  8. Android手机avi转换为mp4手机,如何把avi转换为mp4
  9. Kaggle竞赛PetFinder日记,第2天:随机森林,调参
  10. 弘辽科技:备战双十二