Как сохранить PDF-файл с помощью NHibernate и SQL Server 2005

#.net #sql-server #nhibernate #pdf

Вопрос:

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

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

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

Ответ №1:

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

 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>
    <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# решение будет выглядеть очень похоже.

Ответ №2:

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

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

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

Ответ №3:

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