PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak przechowywać plik pdf w bazie postgresql za pomocą serwletów?

Nie jest jasne, jakiego interfejsu API trwałości używasz. JDBC? JPA? Dobra, stara hibernacja? Zakładam JDBC. W JDBC możesz użyć PreparedStatement#setBinaryStream() do przechowywania InputStream w bazie danych lub PreparedStatement#setBytes() do przechowywania byte[] w bazie danych. Tak czy inaczej, w PostgreSQL potrzebujesz bytea w tym celu.

Gdy weryfikujesz przesłany plik przez PdfReader najpierw InputStream jest nieodpowiedni. Można go przeczytać tylko raz. Klient nie wyśle ​​ponownie pliku wielokrotnie za każdym razem, gdy będziesz musiał odczytać InputStream ponownie. Musisz skopiować InputStream do byte[] pierwszy.

ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();

(IOUtils jest częścią Apache Commons IO; jeśli używasz FileUpload, to już go masz)

Nie zapomnij zmienić iText, aby używał byte[] zamiast tego:

PdfReader localPdfReader = new PdfReader(filecontent);

Po sprawdzeniu poprawności przez iText, możesz przechowywać je w bytea PostgreSQL kolumna za pomocą JDBC w następujący sposób:

statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sprawdzić oczekujące operacje w transakcji PostgreSQL

  2. Ograniczenie Postgresql do sprawdzania znaków spoza ASCII

  3. Biblioteka nie załadowana:/usr/local/opt/readline/lib/libreadline.6.2.dylib

  4. Jak zainstalować pakiet Pythona na Linuksie, aby został znaleziony przez działające już rozszerzenie plpython3u PostgreSQL 13?

  5. Django ORM błędnie odczytuje sekwencje PostgreSQL?