Я использую apache POI для чтения файла xlsx и загрузки данных в базу данных.Я должен сделать эту работу в планировщике (по расписанию), работающем на Jboss.Поскольку планировщик работает на сервере, отличном от того, который был загружен, я использую тип данных postgres bytea для сохранения файла в базе данных, используя следующий код.getPrimaryKey () + "';");
FilePathAssociation filePathAssociation = fileAttachment.getFilePathAssociation();
if ( filePathAssociation != null )
{
File blobFile = new File( filePathAssociation.getPhysicalFilePath() );
FileInputStream fis = new FileInputStream( blobFile );
ps.setBinaryStream( 1, fis, (int)blobFile.length() );
ps.executeUpdate();
ps.close();
fis.close();
}
Работает нормально, файл сохраняется в базе данных.
Но при чтении файла на сервере используйте код ниже
ResultSet rs =
stmt.executeQuery( "SELECT tk_filecolumnname FROM tk_tablename WHERE primarykey = '"
+ fileAttachment.getPrimaryKey() + "';" );
if ( rs != null && rs.next() )
{
InputStream fileInputStream = rs.getBinaryStream( 1 );
Workbook workbook = WorkbookFactory.create( fileInputStream ); // apache POI code to read a xlsx file.
rs.close();
return file;
}
Выдает ошибку ниже,
java.lang.IllegalArgumentException: Your InputStream was neither an OLE2 stream, nor an OOXML stream
Я знаю, что для чтения файла xlsx POI необходим поток, поддерживаемый OOXML.Но почему метод
ResultSet.getBinaryStream()
не возвращает тот же поток ввода, который был сохранен при создании файла.
Пожалуйста, помогите или поделитесь своими знаниями.
спасибо, Амит.