onlyoffice回調函數controller方式實現

原文同步自作者博客: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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281103.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281103.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281103.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

讀Bilgin Ibryam 新作 《Dapr 是一種10倍數 平臺》

Bilgin Ibryam 最近加入了開發者軟件初創公司Diagrid Inc&#xff0c;他是Apache Software Foundation 的 committer 和成員。他也是一個開源的布道師&#xff0c;并且是書籍 Kubernetes設計模式 和 Camel Design Patterns 的作者。早在2020年初 提出的Multi-Runtime Microserv…

如何在iPhone或iPad上使用Safari下載文件

Khamosh PathakKhamosh PathakIn your work or personal life, you’ll sometimes need to download a file on your iPhone or iPad. Using the new feature introduced in iOS 13 and iPadOS 13, you can now do this directly in Safari. No third-party app needed! 在工作…

java版左右手桌面盯盤軟件dstock V1.0

V1.0功能比較簡陋&#xff0c;先滿足自己桌面盯盤需要 V1.0 版本功能介紹&#xff1a; 1. 1s實時刷新盯盤數據 主要市面上的&#xff0c;符合我要求的桌面應用要VIP,窮啊&#xff0c;還是月月付&#xff0c;年年付&#xff0c;還是自己搞吧&#xff01; 2. 配置文件配置股票…

放大倍數超5萬倍的Memcached DDoS反射攻擊,怎么破?

歡迎大家前往騰訊云社區&#xff0c;獲取更多騰訊海量技術實踐干貨哦~ 作者&#xff1a;騰訊游戲云 背景&#xff1a;Memcached攻擊創造DDoS攻擊流量紀錄 近日&#xff0c;利用Memcached服務器實施反射DDoS攻擊的事件呈大幅上升趨勢。DDoS攻擊流量首次過T&#xff0c;引發業界熱…

C# WPF TabControl控件用法詳解

概述TabControl我之前有講過一節&#xff0c;內容詳見&#xff1a;C# WPF TabControl用法指南(精品)&#xff0c;上節主要講解了tabcontrol控件的左右翻頁&#xff0c;以及頁面篩選&#xff0c;以及數據綁定等內容&#xff0c;這節內容繼續接續上節內容進行擴展講解&#xff0c…

pixel 解鎖_如何在Google Pixel 4和Pixel 4 XL上禁用面部解鎖

pixel 解鎖Justin Duino賈斯汀杜伊諾(Justin Duino)Face Unlock is one of the Google Pixel 4 and Pixel 4 XL’s flagship features. But if the facial recognition is a form of biometric security you’re uncomfortable with, you can delete your face data right off …

【實戰】將多個不規則多級表頭的工作表合并為一個規范的一維表數據結果表...

最近在項目里&#xff0c;有個臨時的小需求&#xff0c;需要將一些行列交叉結構的表格進行匯總合并&#xff0c;轉換成規范的一維表數據結構進行后續的分析使用。從一開始想到的使用VBA拼接字符串方式&#xff0c;完成PowerQuery的M語言查詢字符串&#xff0c;然后轉換成使用插…

#if defined(__cplusplus)

由于C編譯器需要支持函數的重載&#xff0c;會改變函數的名稱&#xff0c;因此dll的導出函數通常是標準C定義的。這就使得C和C的互相調用變得很常見。但是有時可能又會直接用C來調用&#xff0c;不想重新寫代碼&#xff0c;讓標準C編寫的dll函數定義在C和C編譯器下都能編譯通過…

happiness[國家集訓隊2011(吳確)]

【試題來源】 2011中國國家集訓隊命題答辯【問題描述】 高一一班的座位表是個n*m的矩陣&#xff0c;經過一個學期的相處&#xff0c;每個同學和前后左右相鄰的同學互相成為了好朋友。這學期要分文理科了&#xff0c;每個同學對于選擇文科與理科有著自己的喜悅值&#xff0c;而一…

sketch怎么移動圖層_什么是Photoshop Express,Fix,Mix和Sketch移動應用程序?

sketch怎么移動圖層Adobe’s approach to mobile apps seems to be “The More, The Better”. Right now, there are five Photoshop branded apps available for iOS and Android. Adobe的移動應用程序方法似乎是“越多越好”。 目前&#xff0c;有五個適用于iOS和Android的P…

imessage_如何在iPhone和iPad上的iMessage組中提及某人

imessageKhamosh PathakKhamosh PathakSometimes, it’s difficult to get someone’s attention in a large iMessage group chat on your iPhone or iPad. However, if you mention that person specifically in a message, your friend will receive a notification about i…

點擊右側導航欄,實現iframe嵌入子頁面中div,滑動到最上面

2019獨角獸企業重金招聘Python工程師標準>>> // 點擊對應的nav里的li標簽,頁面就滾動到哪里 $(.title-list > li).click(function(event) {$(this).addClass(active).siblings().removeClass(active);//li標簽里面有a標簽,可以阻止到a標簽的默認行為event.preven…

wepack環境配置1之node的安裝

.向往已久的webpack終于配好了.. 1.要安裝webpack&#xff0c;首先需要安裝nodejs nodejs下載地址:https://nodejs.org/en/ 下載完成后,一步步安裝即可,我是安裝到D盤 新建一個nodejs的文件夾,裝到這個文件夾里面即可. 安裝完畢后檢查自己是否安裝成功.啟動cmd,然后輸入npm -v,…

【賞析】.NET跨平臺框架-Avalonia UI

這是Avalonia UI官方的一個Demo&#xff0c;站長對部分Nuget包進行了升級&#xff0c;網友【小飛機MLA】對Linux版本修復了字體Bug得以正常運行、演示&#xff1a;Windows 11&#xff1a;macOS 13&#xff1a;可安裝Rider&#xff08;EAP即要&#xff09;開發&#xff0c;站長一…

Kernel Newbies內核開發新手的資源

Jessica McKellar在Ksplice blog上的博客文章《Linux Device Drivers》如果你在寫一個操作系統&#xff0c;OSDev wiki是一個不錯的網站Kernel Newbies內核開發新手的資源

office自定義安裝選項_如何自定義Office 2013中功能區上的現有選項卡

office自定義安裝選項The Ribbon in Microsoft Office 2013 provides quick access to many features and options by default, but it can be further customized to fit the way you use it. You can add a custom tab to the ribbon or you can add commands to the existin…

Centos6.8 安裝spark-2.3.1 以及 scala-2.12.2

一、Spark概述 Spark 是一個用來實現快速而通用的集群計算的平臺。 在速度方面&#xff0c;Spark 擴展了廣泛使用的 MapReduce 計算模型&#xff0c;而且高效地支持更多計算模式&#xff0c;包括交互式查詢和流處理。 在處理大規模數據集時&#xff0c;速度是非常重要的。速…

聊一聊 WPF 程序的鍵盤是如何被竊聽的?

一&#xff1a;背景 1.講故事前幾天群里很熱鬧&#xff0c;看了下在爭論兩個問題&#xff1a;電腦里要不要裝殺毒軟件 ?應該裝什么殺毒軟件 ?不管殺毒軟件流氓不流氓&#xff0c;在如今病毒肆虐的當下互聯網&#xff0c;裝一個還是能幫我們攔截很多意想不到的東西&#xff0c…

httpclient 實現文件上傳中轉

開發功能&#xff1a; web前端提交上傳文件 —> a服務器接收 —> 轉發到b服務器進行文件處理 下面是簡單實現的代碼&#xff0c;具體細節優化根本自己的需求更改。 public String handleResponse(HttpServletRequest request, HttpServletResponse response)throws Unsup…

AngularJS $watch 性能殺手

雙向綁定是AngularJS核心概念之一&#xff0c;它給我們帶來了思維的轉變&#xff0c;不再是以DOM為驅動&#xff0c;而是以Model為核心&#xff0c;View中寫上聲明式標簽&#xff08;指令或{{}}&#xff09;,AngularJS會在后臺默默同步View到Model,并將Model的變化更新到View。…