springBoot 는 easypoi 를 사용 하여 Liux 서버 에서 엑셀 문 제 를 내 보 낼 수 없습니다.
3452 단어 #SpringBoot
엑셀 도구 문서http://www.afterturn.cn/doc/easypoi.html
문서 에 따 르 면 windows 에서 엑셀 다운로드 기능 을 실현 한 것 도 정상 이다.
그러나 Liux 서버 에 놓 았 을 때 엑셀 모드 로 불 러 올 수 없습니다.
잘못된 소식 을 알리다.
2018-02-28 11:32:04,295 [http-nio-8000-exec-3] ERROR [cn.afterturn.easypoi.cache.ExcelCache] - java.lang.NullPointerException
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2203)
excel 모드 경로
src--
------main
-------------------- resources
easypoi 의 엑셀 모드 파일 을 불 러 오 는 소스 코드
package cn.afterturn.easypoi.cache.manager;
FileLoaderImpl
try {
// ,
try {
fileis = new FileInputStream(url);
} catch (FileNotFoundException e) {
//
fileis = ClassLoader.getSystemResourceAsStream(url);
if (fileis == null) {
//
String path = PoiPublicUtil.getWebRootPath(url);
fileis = new FileInputStream(path);
}
}
나중에 springBoot 의 파일 자원 로드 방식 이 다 를 수 있 음 을 알 게 되 었 습 니 다.
Spring - boot 마이크로 서비스 jar 패키지 방식 으로 시작 하여 jar 내 자원 파일 을 로 컬 디스크 로 가 져 옵 니 다.
http://blog.csdn.net/zhangjian15/article/details/73277796
실현 방안 을 바 꿨 어 요.
방법 을 썼 습 니 다: 먼저 찾 은 모델 을 디스크 에 쓰 고 경 로 를 easypoi 의 도구 류 에 전달 합 니 다.
변경 전 호출 방식
TemplateExportParams params = new TemplateExportParams("excelTemplate/myRepay.xls");
수정 후
TemplateExportParams params = new TemplateExportParams(convertTemplatePath("excelTemplate/myRepay.xls"));
도구 클래스
public static String convertTemplatePath(String path) {
// windows
// if (System.getProperties().getProperty("os.name").contains("Windows")) {
// return path;
// }
Resource resource = new ClassPathResource(path);
FileOutputStream fileOutputStream = null;
// tomcat
String folder = System.getProperty("catalina.home");
File tempFile = new File(folder + File.separator + path);
// System.out.println(" :" + tempFile.getPath());
//
if (tempFile.exists()) {
return tempFile.getPath();
}
File parentFile = tempFile.getParentFile();
//
if (!parentFile.exists()) {
parentFile.mkdirs();
}
try {
BufferedInputStream bufferedInputStream = new BufferedInputStream(resource.getInputStream());
fileOutputStream = new FileOutputStream(tempFile);
byte[] buffer = new byte[10240];
int len = 0;
while ((len = bufferedInputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return tempFile.getPath();
}
서둘러 야 하기 때문에 자세히 연구 하지 못 했다
잘못 쓴 부분 이 있 으 니 많은 지도 바 랍 니 다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.