Jmix version: 1.5.3
Jmix Studio plugin version: 2.1.0-232
IntelliJ version: IntelliJ IDEA 2023.2.5 (Ultimate Edition)
Всех приветствую.
Возникает ошибка при загрузке файла, код контроллера:
@UiController("KpApp6.browse")
@UiDescriptor("kp-app6-browse.xml")
@LookupComponent("kpApp6sTable")
public class KpApp6Browse extends StandardLookup<KpApp6> {
private static final Logger log = org.slf4j.LoggerFactory.getLogger(KpApp6Browse.class);
@Autowired
private FileStorageUploadField attachmentFileField;
@Autowired
private TemporaryStorage temporaryStorage;
@Subscribe("attachmentFileField")
public void onAttachmentFileFieldFileUploadSucceed(final SingleFileUploadField.FileUploadSucceedEvent event) {
try {
// Получение объекта File
File tempFile = temporaryStorage.getFile(attachmentFileField.getFileId());
// Преобразование File в Path
String tempFilePath = tempFile.getAbsolutePath();
String beforeSplitCsvFileName = attachmentFileField.getFileName();
String substr = beforeSplitCsvFileName.substring(0, beforeSplitCsvFileName.length() - 5);
String afterSplitCsvFileName = substr + ".csv";
// Определяем путь для CSV файла
Path csvFilePath = Files.createTempFile("converted", ".csv");
// Выполняем конвертацию
convertXlsxToCsv(tempFilePath.toString(), csvFilePath.toString());
// Определяем сетевой путь для выгрузки
Path networkPath = Paths.get("/home/user/jar_files/csv_files", afterSplitCsvFileName);
// Копирование файла в сетевое местоположение
Files.copy(csvFilePath, networkPath);
log.info("File " + afterSplitCsvFileName + " is ready" + "by path /home/user/jar_files/csv_files");
} catch (Exception e) {
log.info(e.getMessage());
}
}
public static void convertXlsxToCsv(String xlsxFilePath, String csvFilePath) throws IOException {
try (OPCPackage pkg = OPCPackage.open(xlsxFilePath);
OutputStream outputStream = new FileOutputStream(csvFilePath);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8))) {
XSSFReader reader = new XSSFReader(pkg);
StylesTable styles = reader.getStylesTable();
ReadOnlySharedStringsTable sharedStrings = new ReadOnlySharedStringsTable(pkg);
XSSFSheetXMLHandler.SheetContentsHandler sheetHandler = new SheetToCSV(pw);
XMLReader parser = XMLReaderFactory.createXMLReader();
parser.setContentHandler(new XSSFSheetXMLHandler(styles, sharedStrings, sheetHandler, new DataFormatter(), false));
// Потоковое чтение и обработка первого листа
InputStream sheetInputStream = reader.getSheet("rId1");
parser.parse(new InputSource(sheetInputStream));
} catch (InvalidFormatException e) {
log.info(e.getMessage());
throw new RuntimeException(e);
} catch (OpenXML4JException e) {
log.info(e.getMessage());
throw new RuntimeException(e);
} catch (SAXException e) {
log.info(e.getMessage());
throw new RuntimeException(e);
}
}
private static class SheetToCSV implements XSSFSheetXMLHandler.SheetContentsHandler {
private final PrintWriter pw;
private boolean firstCellOfRow = true;
public SheetToCSV(PrintWriter pw) {
this.pw = pw;
}
@Override
public void startRow(int rowNum) {
firstCellOfRow = true;
}
@Override
public void endRow(int rowNum) {
pw.println();
}
@Override
public void cell(String cellReference, String formattedValue, XSSFComment comment) {
if (!firstCellOfRow) {
pw.print(',');
}
pw.print(formattedValue);
firstCellOfRow = false;
}
@Override
public void headerFooter(String text, boolean isHeader, String tagName) {
XSSFSheetXMLHandler.SheetContentsHandler.super.headerFooter(text, isHeader, tagName);
}
@Override
public void endSheet() {
XSSFSheetXMLHandler.SheetContentsHandler.super.endSheet();
}
}
}
При локальном запуске проекта файл грузится, конвертируется в csv и выгружается куда нужно без всяких проблем и быстро. Но стоит поместить jar с этим же кодом на сервер Ubuntu возникает эта ошибка и при этом в логах чисто.