PostgreSQL
 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 е част от Apache Commons IO; ако използвате FileUpload, значи вече го имате)

Не забравяйте да промените iText, за да използвате byte[] вместо това:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ограничение на Postgres, гарантиращо наличието на една колона от много?

  2. Отменете текущата/активната заявка в Ruby on Rails

  3. org.hibernate.internal.util.config.ConfigurationException:Не можа да се намери ресурс cfg.xml [/HibernateTest/src/hibernate.cfg.xml]

  4. Изберете N реда със смесени стойности

  5. Връщане на класирани резултати от търсене с помощта на gin индекс със sqlalchemy