Используя java 1.8, я работаю с jar-файлом Spring Boot, в котором я включаю файл изображения в файл Excel с помощью пакета xlsx4j. У меня есть код, работающий для локального добавления файла изображения в файл Excel в моей IDE, проблема в том, что он не работает после того, как я скомпилировал код в файл jar и развернул его на сервере. Я получаю следующее сообщение об ошибке:
java.io.FileNotFoundException: File 'file:/opt/app/lib/myjar.jar!/BOOT-INF/classes!/myimage.jpg' does not exist
Файл изображения находится в папке src / main / resources в проекте, и вот код, где я получаю путь к этому файлу и передаю его к коду, который прикрепляет файл к файлу Excel:
URL imageUrl = Resources.getResource("myimage.jpg");
SpreadsheetMLPackage pkg = SpreadsheetMLPackage.createPackage();
WorksheetPart workSheetPart = pkg.createWorksheetPart(new PartName("/xl/worksheets/sheet1.xml"), "Quote", 1);
Worksheet worksheet = workSheetPart.getContents();
Drawing drawingPart = new Drawing();
Relationship drawingRel = workSheetPart.addTargetPart(drawingPart);
org.xlsx4j.sml.CTDrawing drawing = org.xlsx4j.jaxb.Context.getsmlObjectFactory().createCTDrawing();
workSheetPart.getJaxbElement().setDrawing(drawing);
drawing.setId( drawingRel.getId() );
BinaryPartAbstractImage imagePart
= BinaryPartAbstractImage.createImagePart(pkg, drawingPart,
FileUtils.readFileToByteArray(new File(imageUrl.getPath()) )); // Using path to image file here
String imageRelID = imagePart.getSourceRelationship().getId();
drawingPart.setJaxbElement(
genericExcelUtil.buildDrawingPartContentUsingCode(imageRelID));
Вот трассировка стека, которую я получаю на сервере:
java.io.FileNotFoundException: File 'file:/opt/app/lib/myapp.jar!/BOOT-INF/classes!/myimage.jpg' does not exist
at org.apache.commons.io.FileUtils.openInputStream(FileUtils.java:292)
at org.apache.commons.io.FileUtils.readFileToByteArray(FileUtils.java:1815)
at com.myco.myapp.util.excel.FileImpl.generateExcel(FileImpl.java:113)
at com.myco.myapp.service.impl.EmailServiceImpl.sendEmailService(EmailingServiceImpl.java:61)
at com.myco.myapp.controller.MyController.sendEmailWithDoc(MyController.java:374)
При выполнении System.out. println для imageUrl.getPath (), вот как это выглядит в моей IDE:
/C:/Users/userid/Documents/workspace-sts-3.9.3.RELEASE/myapp/target/classes/myimage.jpg
Вот как это выглядит при запуске на сервере:
file:/opt/app/lib/myapp.jar!/BOOT-INF/classes!/myimage.jpg
Кажется что «новый файл (imageUrl.getPath ())» терпит неудачу, потому что при запуске с сервера он не может найти файл. Любые идеи о том, как я могу справиться с этим?