【優化版】Java檔案上傳資料庫(並儲存本地)、word轉pdf並進行頁面預覽
阿新 • • 發佈:2018-12-12
上一篇檔案上傳【點選跳轉】,是將路徑等檔案資訊存進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(); } } }