2

私は、ユーザーが自分の履歴書を PDF 形式でアップロードできる Web アプリケーションを開発しています。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
)

ドキュメントの raw バイトを配列に読み込んで永続化するだけです。私たちの状況では、ドキュメントは 1MB よりもほとんど大きくならないため、すべてをバイト配列に入れてもパフォーマンスの問題は発生しません。おそらく、このソリューションは非常に大きなドキュメントには適していません。

NHibernate の実装と C# を使用すると、ソリューションは非常に似ていると思います。

于 2008-10-14T09:50:22.020 に答える
0

INSERT INTO テーブル (DocumentId、PDF) 値 (newid()、0x12345667)

ここで、16 進数の定数は、16 進数でエンコードされた PDF のバイトストリームです。

誰かがより良い方法を見つけることができると確信していますが、これは私には明らかです。

于 2008-10-10T20:24:17.047 に答える
0

PDFをテーブルに入れる必要がある理由は何ですか? ファイルをファイルシステムに保存し、ID で参照できます。これにより、SQL Server のスペースを節約できます。とにかく、バイナリデータにインデックスを付けることができるとは思いません。

于 2008-10-10T20:29:18.643 に答える