2008-10-10 2 views
2

Я разрабатываю webapp, где пользователю предоставляется возможность загрузить свое резюме в формате pdf. Я использую NHibernate в качестве преобразователя данных и MS SQL SERVER 2005.Как сохранить файл PDF Использование NHibernate и SQL Server 2005

Я хочу, чтобы сохранить файл .pdf в данную таблицу ... любые идеи?

спасибо!

ответ

5

Мы делаем именно это с «оригинальным» Java Hibernate3. Вы просто сопоставляете свойство массива байтов вашего persistable класса с столбцом типа «образ».

package com.hibernate.pdf.sample; 

public class TPDFDocument implements java.io.Serializable { 


     private Integer pdfDocumentId; 
     private byte[] document; 


     public Integer getPdfDocumentId() { 
      return this.pdfDocumentId; 
     } 

     public void setPdfDocumentId(Integer pdfDocumentId) { 
      this.pdfDocumentId = pdfDocumentId; 
     } 

     public byte[] getDocument() { 
      return this.document; 
     } 

     public void setDocument(byte[] document) { 
      this.document = document; 
     } 

} 

Hibernate Mapping:

<hibernate-mapping> 
    <class name="com.hibernate.pdf.sample.TPDFDocument" table="T_PDFDocument"> 
     <id name="pdfDocumentId" type="integer"> 
      <column name="pdfDocumentId" /> 
      <generator class="identity" /> 
     </id> 
     <property name="document" type="binary"> 
      <column name="document" not-null="true" /> 
     </property> 
    </class> 
</hibernate-mapping> 

создание таблицы:

CREATE TABLE [dbo].[T_PDFDocument](
    [pdfDocumentId] [int] IDENTITY(1,1) NOT NULL, 
    [document] [image] NOT NULL, 
CONSTRAINT [PK_PDFDocument] PRIMARY KEY CLUSTERED 
(
    [pdfDocumentId] ASC 
) 

Все, что вам нужно сделать, это прочитать документы необработанных байтов в массив и сохраняются его. В нашей ситуации документы будут чуть больше 1 МБ, поэтому включение всего байта в массив не вызовет проблем с производительностью. Возможно, это решение невозможно для очень больших документов.

Я предполагаю, что с реализацией NHibernate и C# решение будет выглядеть очень похоже.

0

ВСТАВИТЬ в таблицу (DocumentId, PDF) ЗНАЧЕНИЯ (NEWID(), 0x12345667)

, где гекс константа гекс-закодированы потоковый в формате PDF.

Я уверен, что кто-то может найти лучший способ, но это очевидно для меня.

0

Любые причины, по которым вам нужно поставить PDF в таблицу? Вы можете сохранить файл в файловой системе и указать его с идентификатором. Это сэкономит вам пространство SQL Server. Я не думаю, что вы можете индексировать двоичные данные.

Смежные вопросы