sql >> データベース >  >> RDS >> PostgreSQL

サーブレットを使用してpdfファイルをpostgresqlデータベースに保存するにはどうすればよいですか?

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



    1. PostgreSQLの日付から日を取得する

    2. MySQLとPythonのSelectステートメントの問題

    3. SQL Developer 4.1.2

    4. 表で類似の番号パターンを見つける