一.安装OnlyOffice环境
可以参考:
1.Win7上通过DckerToolbox部署OnlyOffice
2.Linux通过Docker部署OnlyOffice
二.基于官网Java集成示例
1.下载官网示例代码
2.官网案例运行
Jdk1.8、windows操作系统、maven、tomcat(使用idea不需要安装)、eclipse/idea开发工具
使用idea开发需在pom.xml导入tomcat插件即可,使用eclipse开发,需安装tomcat,并部署至tomcat容器中,运行项目工程。
我使用的是eclipse
如果是idea加上
修改配置文件settings.properties,配置自己的Document Server服务器地址
运行项目以后出现下图界面表示运行成功
3.案例修改
一般打开文件或者创建文件会出现
主要是因为url或者callbackUrl路径不正确
url是打开文件地址,地址保证onlyoffice服务器可以访问到即可
callbackUrl我们可以写一个回调方法,将文件保存到自己想保存的位置,我是写了一个CallBackServlet,保存到本地硬盘,具体存到哪里可根据业务需求,也可以配置专门的文件服务器
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = null;
System.out.println("===saveeditedfile------------") ;
try {
writer = response.getWriter();
Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\A");
String body = scanner.hasNext() ? scanner.next() : "";
JSONObject jsonObj = (JSONObject) new JSONParser().parse(body);
System.out.println("===saveeditedfile:" + jsonObj.get("status")) ;
/*
0 - no document with the key identifier could be found,
1 - document is being edited,
2 - document is ready for saving,
3 - document saving error has occurred,
4 - document is closed with no changes,
6 - document is being edited, but the current document state is saved,
7 - error has occurred while force saving the document.
* */
if ((long) jsonObj.get("status") == 2) {
/*
* 当我们关闭编辑窗口后,十秒钟左右onlyoffice会将它存储的我们的编辑后的文件,,此时status = 2,通过request发给我们,我们需要做的就是接收到文件然后回写该文件。
* */
/*
* 定义要与文档存储服务保存的编辑文档的链接。当状态值仅等于2或3时,存在链路。
* */
String downloadUri = (String) jsonObj.get("url");
System.out.println("====文档编辑完成,现在开始保存编辑后的文档,其下载地址为:" + downloadUri);
//解析得出文件名
//String fileName = downloadUri.substring(downloadUri.lastIndexOf('/')+1);
String fileName = request.getParameter("fileName");
System.out.println("====下载的文件名:" + fileName);
URL url = new URL(downloadUri);
java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();
InputStream stream = connection.getInputStream();
//更换为实际的路径
File savedFile = new File("F:\DataOfHongQuanzheng\onlyoffice_data\app_data\"+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();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*
* status = 1,我们给onlyoffice的服务返回{"error":"0"}的信息,这样onlyoffice会认为回调接口是没问题的,这样就可以在线编辑文档了,否则的话会弹出窗口说明
* */
writer.write("{\"error\":0}");
}
修改后可以正常打开文件了
关闭后如果有做修改,会自动保存
三.我的案例源码
因为官网的demo无法直接运行,也有挺多网友问我要demo,我就把我改的demo放到github希望可以帮到大家
地址:https://github.com/hqzhen/DemoOfOnlyoffice.git