1. 程式人生 > >【優化版】Java檔案上傳資料庫(並儲存本地)、word轉pdf並進行頁面預覽

【優化版】Java檔案上傳資料庫(並儲存本地)、word轉pdf並進行頁面預覽

上一篇檔案上傳【點選跳轉】,是將路徑等檔案資訊存進log_file臨時表,內容二進位制存入資料庫Test表,這種邏輯是在呼叫資料庫表Test內容展示時,判斷檔案為word(轉換成pdf)還是pdf(直接展示)。 上一篇連結:連結地址。 下面進一步優化: 具體邏輯:刪除原資料表Test,路徑等檔案資訊依舊存log_file表。檔案預覽時,判斷檔案型別,如果為word型別,進行轉換pdf展示;反之直接展示檔案。 word型別條件滿足後,進一步判斷檔案是否已經轉換過(判斷依據是根據路徑下檔名查詢相同檔名的pdf檔案是否存在),如果同名的pdf檔案存在,表示已經轉換過,直接展示;如果不存在,word轉換pdf,再展示。

程式碼如下:

public void world(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException {
        List<LogFile> files = terminalServiceImpl.world();
        //用作例項展示,在這取得是資料庫第二條資訊:以word檔案展示。
        String path = files.get(1).getFilePath();
        String filename=files.get(1).getFileName();

        //1.根據檔案字尾獲取檔案型別
        File wordName=new File(filename);
        String fileName=wordName.getName();
        String fileTyle=fileName.substring(fileName.lastIndexOf("."),fileName.length());
        logger.info("------檔案字尾名------"+fileTyle);

        //如果檔案型別為word,需要先轉換成pdf
        if(fileTyle.equals(".doc")||fileTyle.equals(".docx")){
                //1.判斷檔案是否已經轉換pdf,檔案是否存在:檔案字首+.pdf(word是否已經轉換過pdf),如果存在直接展示pdf
                File fileOne = new File(path);
                String caselsh = filename.substring(0,filename.lastIndexOf("."));
                logger.info("------pdf檔名字------"+caselsh+"pdf.pdf");
//                File fileIf = new File(fileOne+"\\" + caselsh+".pdf");
                String filePath=(fileOne+"\\" + caselsh+"pdf.pdf");
                File fileIf=new File(filePath);
                if(!fileIf.exists()){
                    String pdfFilePath = OpenOfficeUtil.wordToPDF(path,filename);
                    System.err.println(pdfFilePath);
                    FileInputStream fileInputStream = new FileInputStream(pdfFilePath);
                    byte[] content = new byte[fileInputStream.available()];
                    fileInputStream.read(content);
                    fileInputStream.close();
                    ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
                    if (servletOutputStream != null && content != null){
                        httpServletResponse.setContentType("application/pdf");
                        httpServletResponse.setContentLength(content.length);
                        httpServletResponse.setHeader("Expires","0");
                        httpServletResponse.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");
                        httpServletResponse.setHeader("Pragma","public");
                        servletOutputStream.write(content);
                        servletOutputStream.flush();
                        servletOutputStream.close();
                    }
                }else{
                    File file3 = new File(filePath);
                    //獲取pdf檔案路徑,內容做展示
                    byte[] resultE = new byte[(int) file3.length()];
                    FileInputStream fis = new FileInputStream(file3);
                    fis.read(resultE); //read file into bytes[]
                    fis.close();
                    ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
                    if (servletOutputStream != null && resultE != null){
                        httpServletResponse.setContentType("application/pdf");
                        httpServletResponse.setContentLength(resultE.length);
                        httpServletResponse.setHeader("Expires","0");
                        httpServletResponse.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");
                        httpServletResponse.setHeader("Pragma","public");
                        servletOutputStream.write(resultE);
                        servletOutputStream.flush();
                        servletOutputStream.close();
                    }
            }
        }else{
            File file = new File(path);
            File file2 = new File(file+"\\" + filename);
            //獲取pdf檔案路徑,內容做展示
            byte[] result = new byte[(int) file2.length()];
            FileInputStream fis = new FileInputStream(file2);
            fis.read(result); //read file into bytes[]
            fis.close();
            ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
            if (servletOutputStream != null && result != null){
                httpServletResponse.setContentType("application/pdf");
                httpServletResponse.setContentLength(result.length);
                httpServletResponse.setHeader("Expires","0");
                httpServletResponse.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");
                httpServletResponse.setHeader("Pragma","public");
                servletOutputStream.write(result);
                servletOutputStream.flush();
                servletOutputStream.close();
            }
        }
   }