POI导出word带图片及本地测试没问题,在服务器上找不到模板的问题
生活随笔
收集整理的這篇文章主要介紹了
POI导出word带图片及本地测试没问题,在服务器上找不到模板的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
https://gitee.com/hffs/poi-tl
官網:http://deepoove.com/poi-tl/
依賴
poi-tl需要poi版本高于4.1.1,但是poi版本4.1.1沒有XWPFTemplate,所以這里用的poi版本是4.1.2
poi-tl版本1.0.0 不能new PictureRenderData獲取圖片,所以這里用的1.8.2
FileUtil
public class FileUtil { /*** 下載文件到瀏覽器* @param request* @param response* @param filename 要下載的文件名* @param file 需要下載的文件對象* @throws IOException*/public static void downFile(HttpServletRequest request, HttpServletResponse response, String filename, File file) throws IOException {// 文件存在才下載if (file.exists()) {OutputStream out = null;FileInputStream in = null;try {// 1.讀取要下載的內容in = new FileInputStream(file);// 2. 告訴瀏覽器下載的方式以及一些設置// 解決文件名亂碼問題,獲取瀏覽器類型,轉換對應文件名編碼格式,IE要求文件名必須是utf-8, firefo要求是iso-8859-1編碼String agent = request.getHeader("user-agent");if (agent.contains("FireFox")) {filename = new String(filename.getBytes("UTF-8"), "iso-8859-1");} else {filename = URLEncoder.encode(filename, "UTF-8");}// 設置下載文件的mineType,告訴瀏覽器下載文件類型String mineType = request.getServletContext().getMimeType(filename);response.setContentType(mineType);// 設置一個響應頭,無論是否被瀏覽器解析,都下載response.setHeader("Content-disposition", "attachment; filename=" + filename);// 將要下載的文件內容通過輸出流寫到瀏覽器out = response.getOutputStream();int len = 0;byte[] buffer = new byte[1024];while ((len = in.read(buffer)) > 0) {out.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {if (out != null) {out.close();}if (in != null) {in.close();}}}} /*** 遞歸刪除目錄下的所有文件及子目錄下所有文件** @param filePath 將要刪除的文件目錄路徑* @return boolean Returns "true" if all deletions were successful.* If a deletion fails, the method stops attempting to* delete and returns "false".*/public static boolean deleteDir(String filePath) {File dir = new File(filePath);if (dir.isDirectory()) {String[] children = dir.list();//遞歸刪除目錄中的子目錄下for (int i = 0; i < children.length; i++) {boolean success = deleteDir(filePath + File.separator + children[i]);if (!success) {return false;}}}// 目錄此時為空,可以刪除return dir.delete();} }測試
圖片格式(最上面官網中)如下:
以上在本地沒問題,打成jar包在服務器上就找不到模板
本來以為是路徑的問題,但是測試后發現絕對路徑和相對路徑都訪問不到模板
原來是使用ClassPathResource獲取classpath下文件失敗了
返回的是一個Jar協議地址:jar:file:/xxx/xx.jar!/xxxx。
參考自:https://www.renfei.net/posts/1003293
解決方案如下圖
昨邊為之前的只能在本地的
右邊為更改后
總結
以上是生活随笔為你收集整理的POI导出word带图片及本地测试没问题,在服务器上找不到模板的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: k线怎么看涨跌
- 下一篇: 微信钱包最多能存多少钱,没有总金额限制