使用している永続APIが不明です。 JDBC? JPA?古き良きHibernate? JDBCを想定します。 JDBCでは、 PreparedStatement#setBinaryStream()
InputStreamを保存する データベース内、または PreparedStatement#setBytes()
byte []を保存する データベース内。いずれにせよ、PostgreSQLでは bytea>
このための列。
アップロードされたファイルをPdfReaderで確認しているとき まず、 InputStream 不適当です。つまり、一度だけ読み取ることができます。 InputStream を読み取る必要があるたびに、クライアントがファイルを複数回再送信することはありません。 また。 InputStreamをコピーする必要があります byte []に 最初。
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
( IOUtils ApacheCommonsIOの一部です。 FileUploadを使用している場合は、すでに使用しています)
byte []を使用するようにiTextを変更することを忘れないでください 代わりに:
PdfReader localPdfReader = new PdfReader(filecontent);
iTextで検証した後、PostgreSQLの byteaに保存できます。 次のようにJDBCを使用する列:
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();