Как сохранить файл PDF с помощью NHibernate и SQL Server 2005 - PullRequest
2 голосов
/ 11 октября 2008

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

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

Большое спасибо!

Ответы [ 3 ]

5 голосов
/ 14 октября 2008

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

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:

<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 голосов
/ 11 октября 2008

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

0 голосов
/ 11 октября 2008

INSERT INTO Table (DocumentId, PDF) ЗНАЧЕНИЯ (newid (), 0x12345667)

где шестнадцатеричная константа - это шестнадцатеричный код потока PDF.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...