#.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. Я все равно не верю, что вы можете индексировать двоичные данные.