使用している永続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();