91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pageoffice如何結合fastdfs在線編輯及預覽office文檔

發布時間:2021-10-20 09:56:37 來源:億速云 閱讀:232 作者:柒染 欄目:大數據

本篇文章給大家分享的是有關Pageoffice如何結合fastdfs在線編輯及預覽office文檔,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

背景:我們項目的文檔是存放在fastdfs服務器上面的,現有需求需要實現將fastdfs上面的各種office文檔在網站頁面進行預覽和編輯保存

方案:由于fastdfs目前是不支持文檔的更新的,所以只能通過插入新文檔,刪除老文檔的方式來實現,同時需要將原有數據庫表中存儲的文件uuid給更新掉,然后pageoffice只能支持文檔在本服務器內的預覽和編輯,因此需要在應用服務器中先下載fastdfs服務器中的文件,然后本地保存為臨時文件,然后給pageoffice預覽編輯,保存后再通過刪除和插入來更新fastdfs的文件,從而達到目的。

補充:需要定時清理由此產生的應用服務器下載的臨時文件

大部分代碼可以參考pageoffice官網文檔中的

PageOffice 4.5 for JAVA (同時支持IE、Chrome、Firefox版)

PageOffice 4.5 for Spring Boot[示例代碼]

放代碼:

pageoffice初始配置類

@Configuration
public class PageOfficeConfiguration {

    /**
     * 添加PageOffice的服務器端授權程序Servlet(必須)
     */
    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
        com.zhuozhengsoft.pageoffice.poserver.Server poserver = new com.zhuozhengsoft.pageoffice.poserver.Server();
        //設置PageOffice注冊成功后,license.lic文件存放的目錄
        //服務器可以存放在/geelyapp/pageoffice
        poserver.setSysPath("d:\\lic\\");
        ServletRegistrationBean srb = new ServletRegistrationBean(poserver);
        srb.addUrlMappings("/xx/pageoffice/poserver.zz");
        srb.addUrlMappings("/xx/pageoffice/posetup.exe");
        srb.addUrlMappings("/xx/pageoffice/pageoffice.js");
        srb.addUrlMappings("/xx/pageoffice/jquery.min.js");
        srb.addUrlMappings("/xx/pageoffice/pobstyle.css");
        srb.addUrlMappings("/xx/pageoffice/sealsetup.exe");
         return srb;// 
    }
}

應用controller類

@Controller
@RequestMapping("/xx/pageoffice")
@Api(value = "文檔在線編輯接口")
public class PageOfficeController {
    @Value("${pageoffice.path.doc:'D:/doc/'}")
    private String pageofficeDocPath;
    
    @Autowired
    private StorageService storageService;//fastdfs封裝服務類
    @Autowired
    private ICommonUtilService commonUtilService;
    
    private static final Logger LOGGER = LoggerFactory.getLogger(PageOfficeController.class);
    
    @RequestMapping(value="/index", method=RequestMethod.GET)
    public ModelAndView showIndex(
        @ApiParam(name = "busi", required = true, value = "業務代碼")
        @RequestParam(name = "busi", required = true) String busi,
        @ApiParam(name = "filePath", required = true, value = "文件遠程路徑(相對路徑,不是包含http的全路徑)")
        @RequestParam(name = "filePath", required = true) String filePath,
        Map<String,Object> map) {
        map.put("busi",busi);
        map.put("filePath",filePath);
        ModelAndView mv = new ModelAndView("Index");
        return mv;
    }
    
@RequestMapping(value="/word", method=RequestMethod.GET)
    public ModelAndView showWord(HttpServletRequest request, Map<String,Object> map,
            @ApiParam(name = "busi", required = false, value = "業務代碼")
            @RequestParam(name = "busi", required = false) String busi,
            @ApiParam(name = "filePath", required = false, value = "文件遠程路徑(相對路徑,不是包含http的全路徑)")
            @RequestParam(name = "filePath", required = false) String filePath){
        String[] param = busi.split("%");//這里因為使用&符合傳遞多個參數時會導致被編譯為&amp;導致無法調用成功
        busi = param[0];
        filePath = param[2];
//        pageofficeDocPath = "D:\\doc\\"; //本地開發環境時可使用
        String[] filePathArr = filePath.split("/");
        String url = pageofficeDocPath+filePathArr[filePathArr.length-1];
        LOGGER.info("showWord url:"+url);
        File tmpFile = new File(url);
        try (FileOutputStream fos = new FileOutputStream(tmpFile)){
            fos.write(this.storageService.readFileContent(filePath));
        } catch (Exception e) {
            LOGGER.error("預覽臨時文件生成錯誤",e);
            throw BusinessException.withErrorCode(Errors.System.ILLEAGAL_DATA);
        }
        //--- PageOffice的調用代碼 開始 -----
        PageOfficeCtrl poCtrl=new PageOfficeCtrl(request);
        poCtrl.setServerPage("/xx/pageoffice/poserver.zz");//設置授權程序servlet
        poCtrl.addCustomToolButton("保存","Save",1); //添加自定義按鈕
        poCtrl.setSaveFilePage("/xx/pageoffice/save?filePath="+filePath+"&busi="+busi+"&url="+url);//設置保存時的action
        String prefix = "file://";//linux服務器查找文件需要額外前綴
        url = prefix + url;
        LOGGER.info("showWord pageoffice url:"+url);
        if(filePath.endsWith(".doc")||filePath.endsWith(".docx")) {
            poCtrl.webOpen(url,OpenModeType.docAdmin,SessionContextUtil.getSrmUserName());
        }else if(filePath.endsWith(".xls")||filePath.endsWith(".xlsx")) {
            poCtrl.webOpen(url,OpenModeType.xlsNormalEdit,SessionContextUtil.getSrmUserName());
        }else if(filePath.endsWith(".ppt")||filePath.endsWith(".pptx")) {
            poCtrl.webOpen(url,OpenModeType.pptNormalEdit,SessionContextUtil.getSrmUserName());
        }
        map.put("pageoffice",poCtrl.getHtmlCode("PageOfficeCtrl1"));
        //--- PageOffice的調用代碼 結束 -----
        ModelAndView mv = new ModelAndView("Word");
        return mv;
    }
    
    @RequestMapping("/save")
    public void saveFile(HttpServletRequest request, HttpServletResponse response,
        @ApiParam(name = "busi", required = true, value = "業務代碼")
        @RequestParam(name = "busi", required = true) String busi,
        @ApiParam(name = "url", required = false, value = "臨時文件url")
        @RequestParam(name = "url", required = false) String url,
        @ApiParam(name = "filePath", required = true, value = "文件遠程路徑(相對路徑,不是包含http的全路徑)")
        @RequestParam(name = "filePath", required = true) String filePath){
        FileSaver fs = new FileSaver(request, response);
        //由于fastdfs并不支持文件更新
        //目前考慮刪除原有的文件,重新生成文件
        //TODO 后面可以考慮支持文件的更新,即框架來做刪除插入,并且新插入的uuid需要跟刪除的一致
        String newCode = this.storageService.store(fs.getFileName(), fs.getFileStream());
        //將原來業務表中的文檔uuid更新
        commonUtilService.updateFilePath(busi,filePath,newCode);
        this.storageService.delete(filePath);
//        fs.saveToFile(url);
        fs.close();

        File tmpFile = new File(url);
        tmpFile.delete();
    }
}

Index.ftl

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Index</title>
        <script type="text/javascript" src="jquery.min.js"></script>
         <script type="text/javascript" src="pageoffice.js" id="po_js_main"></script>

    </head>
    <body>
        <h2>PageOffice預覽準備</h2>
        
        <a href="javascript:POBrowser.openWindowModeless('/xx/pageoffice/word?busi=${busi}%filePath%${filePath}','width=1200px;height=800px;');">打開文件 </a>
    </body>
</html>

Word.ftl

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Hello World!</title>
        <script type="text/javascript">
              function Save() {
                  document.getElementById("PageOfficeCtrl1").WebSave();
            }
        </script>
        <script type="text/javascript">
         function AddSeal() {
            try{
                  document.getElementById("PageOfficeCtrl1").ZoomSeal.AddSeal();
            }catch (e){ };
            }
          </script>
    </head>
    <body>
        <div >${pageoffice}</div>
    </body>
</html>

以上就是Pageoffice如何結合fastdfs在線編輯及預覽office文檔,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

砀山县| 游戏| 鄂托克前旗| 马尔康县| 资阳市| 临沧市| 花垣县| 汝州市| 平阳县| 辽中县| 平武县| 郎溪县| 新宁县| 仪征市| 桃源县| 左贡县| 宕昌县| 二连浩特市| 远安县| 区。| 丰原市| 武强县| 洞头县| 苏州市| 宁都县| 南康市| 巴彦淖尔市| 日照市| 响水县| 苏尼特右旗| 台北县| 越西县| 资溪县| 礼泉县| 舞钢市| 东光县| 武胜县| 交城县| 道孚县| 灵武市| 嘉荫县|