我正在开发一个网络应用程序,用户有机会以 pdf 格式上传他的简历。我使用 NHibernate 作为数据映射器和 MS SQL SERVER 2005。
我希望能够将 .pdf 文件保存到给定的表中……有什么想法吗?
非常感谢你!
我正在开发一个网络应用程序,用户有机会以 pdf 格式上传他的简历。我使用 NHibernate 作为数据映射器和 MS SQL SERVER 2005。
我希望能够将 .pdf 文件保存到给定的表中……有什么想法吗?
非常感谢你!
我们使用“原始”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# 的解决方案看起来非常相似。
插入表(DocumentId,PDF)值(newid(),0x12345667)
其中十六进制常量是 PDF 的十六进制编码字节流。
我相信有人可以找到更好的方法,但这对我来说很明显。
您需要将 PDF 放入表格中的任何原因?您可以将文件保存到文件系统并使用 ID 引用它。这将为您节省一些 SQL Server 空间。我不相信你可以索引二进制数据。