2

我正在开发一个网络应用程序,用户有机会以 pdf 格式上传他的简历。我使用 NHibernate 作为数据映射器和 MS SQL SERVER 2005。

我希望能够将 .pdf 文件保存到给定的表中……有什么想法吗?

非常感谢你!

4

3 回答 3

5

我们使用“原始”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
)

您所要做的就是将文档原始字节读入数组并将其持久化。在我们的情况下,文档几乎不会大于 1MB ,因此将整个内容放入字节数组中不会导致性能问题。也许这个解决方案对于非常大的文档是不可行的。

我猜 NHibernate 实现和 C# 的解决方案看起来非常相似。

于 2008-10-14T09:50:22.020 回答
0

插入表(DocumentId,PDF)值(newid(),0x12345667)

其中十六进制常量是 PDF 的十六进制编码字节流。

我相信有人可以找到更好的方法,但这对我来说很明显。

于 2008-10-10T20:24:17.047 回答
0

您需要将 PDF 放入表格中的任何原因?您可以将文件保存到文件系统并使用 ID 引用它。这将为您节省一些 SQL Server 空间。我不相信你可以索引二进制数据。

于 2008-10-10T20:29:18.643 回答