在 SharePoint 中对二进制大型对象 (BLOB) 进行爬网
了解如何修改数据库 BCS 索引连接器的 BDC 模型文件,以启用 SharePoint 中的搜索功能爬网程序对存储在 SQL Server 数据库中的二进制大型对象 (BLOB) 进行爬网。
对 BLOB 数据进行爬网
Business Data Connectivity (BDC) 服务 支持读取 BLOB 数据类型,这对于从外部系统流式传输 BLOB 数据非常有用。 为此,您需要确保包含外部数据的数据库设置为支持读取该数据类型。 然后将 StreamAccessor 方法添加到外部内容源的 BCS 索引连接器的 BDC 模型文件。
为 BLOB 数据配置 SQL Server 数据库表
Microsoft SQL Server 数据库表必须具有一列,用于指定 BLOB 数据的扩展名或 MIME 类型。 如果数据库表架构不具有包含此信息的列,则必须将此列添加到架构中。 下表包含一个具有此列的数据库表架构示例以及存储在该数据库表中的此列的示例值。
表 1. 示例数据库表架构
列名称 | 数据类型 |
---|---|
Id | Int |
DisplayName | nvarchar(50) |
扩展名 | nvarchar(50) |
数据 | varbinary(MAX) |
ContentType | nvarchar(MAX) |
表 2. 示例数据库表值
Id | 显示名称 | 扩展名 | Data | Content Type |
---|---|---|---|---|
1 | File1 | .docx | 0x504B… | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
2 | File2 | .doc | 0xD… | application/msword |
3 | File3 | .txt | OxE… | text/plain |
修改 BDC 模型文件,以便对 BLOB 数据进行爬网
在您确认数据库表包含 BLOB 数据的扩展名或 MIME 类型信息之后,可使用 Microsoft SharePoint Designer 创建基于包含 BLOB 数据的表的外部内容类型。 然后,您可以创建所有操作。 有关详细信息,请参阅如何:创建外部内容类型和如何:基于SQL Server表创建外部内容类型。
创建 BLOB 外部内容类型后,您即可修改 BDC 模型文件以启用爬网。 您无法在 SharePoint Designer 中进行这些修改。 因此,您必须导出 BDC 模型文件,并使用 XML 编辑器手动进行这些修改。
导出 BLOB 外部内容类型的 BDC 模型文件
- 在 SharePoint Designer 中,单击左侧导航中的"外部内容类型",以显示该网站的服务应用程序的 BDC 元数据存储中定义的外部内容类型。
- 在"外部内容类型"列表中,选择"BLOB"外部内容类型。 然后单击服务器功能区上的"导出 BDC 模型"。
- 在"BDC 模型名称"文本框中键入一个名称,然后单击"确定"。
- 选择您希望保存 BDC 模型 (.bdcm) 文件的位置,然后单击"保存"。
启用对 BLOB 外部内容类型的爬网
在 XML 编辑器中,打开您在上一节中创建的 BDC 模型文件。
创建一个可返回 BLOB 字段的新方法。 您应为此方法定义一个 StreamAccessor 类型方法实例,如下面的示例所示。
注意
在此示例中,表名称为“Attachment”。
<Method Name="GetData"> <Properties> <Property Name="RdbCommandText" Type="System.String">SELECT Data FROM [dbo].[Attachment] WHERE [Id] = @Id </Property> <Property Name="RdbCommandType" Type="System.Data.CommandType, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">Text</Property> </Properties> <Parameters> <Parameter Direction="In" Name="@Id"> <TypeDescriptor TypeName="System.Int32" IdentifierName="Id" Name="Id" /> </Parameter> <Parameter Name="StreamData" Direction="Return"> <TypeDescriptor TypeName="System.Data.IDataReader, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" IsCollection="true" Name="DataReaderTypeDescriptorName"> <TypeDescriptors> <TypeDescriptor TypeName="System.Data.IDataRecord, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="DataRecordTypeDescriptorName"> <TypeDescriptors> <TypeDescriptor TypeName="System.Data.SqlTypes.SqlBytes, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="Data" /> </TypeDescriptors> </TypeDescriptor> </TypeDescriptors> </TypeDescriptor> </Parameter> </Parameters> <MethodInstances> <MethodInstance Name="DataAccessor" Type="StreamAccessor" ReturnParameterName="StreamData" ReturnTypeDescriptorName="Data"> <Properties> <!-- If extension field is available--> <Property Name="Extension" Type="System.String">Extension</Property> <!--If MimeType is available--> <Property Name="ContentType" Type="System.String">ContentType</Property> <!--If attachments is to be displayed in profile pages, add the following property--> <Property Name="MimeTypeField" Type="System.String">ContentType</Property> </Properties> </MethodInstance> </MethodInstances> </Method>
如果所有 BLOB 的 MIME 类型相同,则可以替换上一示例中的以下代码行:
<Property Name="ContentType" Type="System.String">ContentType</Property>
替换为以下代码行:
<Property Name=" ContentType " Type="System.String">application/vnd.openxmlformats-officedocument.wordprocessingml.document</Property>
使用 Business Connectivity Services 服务应用程序管理用户界面重新导入模型文件。
为外部内容类型创建内容源。
对内容源启动完全爬网。