我想通过核心服务将PDF,Word和Excel文件推送到SDL Tridion 2011中。
我尝试了下面的代码,但得到了这个错误:
属性'BinaryContent'的值无效。无法打开上传的文件:
using (ChannelFactory<ISessionAwareCoreService> factory =
new ChannelFactory<ISessionAwareCoreService>("wsHttp_2011"))
{
ISessionAwareCoreService client = factory.CreateChannel();
ComponentData multimediaComponent = (ComponentData)client.GetDefaultData(
ItemType.Component, "tcm:19-483-2");
multimediaComponent.Title = "MultimediaFile";
multimediaComponent.ComponentType = ComponentType.Multimedia;
multimediaComponent.Schema.IdRef = "tcm:19-2327-8";
using (StreamUploadClient streamClient = new StreamUploadClient())
{
FileStream objfilestream = new FileStream(@"\My Documents\My Poc\images.jpg",
FileMode.Open, FileAccess.Read);
string tempLocation = streamClient.UploadBinaryContent("images.jpg",
objfilestream);
}
BinaryContentData binaryContent = new BinaryContentData();
binaryContent.UploadFromFile = @"C:\Documents and Settings\My Poc\images.jpg";
binaryContent.Filename = "images.jpg";
binaryContent.MultimediaType = new LinkToMultimediaTypeData()
{
IdRef ="tcm:0-2-65544"
};
multimediaComponent.BinaryContent = binaryContent;
IdentifiableObjectData savedComponent = client.Save(multimediaComponent,
new ReadOptions());
client.CheckIn(savedComponent.Id, null);
Response.Write(savedComponent.Id);
}
答案 0 :(得分:5)
在这里阅读Ryan的精彩文章http://blog.building-blocks.com/uploading-images-using-the-core-service-in-sdl-tridion-2011
所有二进制文件都以相同的方式处理 - 因此他的图像技术对文档同样有效,只需确保使用具有适当mime类型的Schema。
答案 1 :(得分:4)
使用核心服务将二进制文件上载到Tridion的过程是:
StreamUploadClient
将二进制数据上传到Tridion服务器。这将返回Tridion服务器上文件的路径。BinaryContentData
(使用从步骤1返回的路径)ComponentData
,引用第2步中的BinaryContentData
ComponentData
您正在步骤2中设置文件的本地路径。
binaryContent.UploadFromFile = @"C:\Documents and Settings\My Poc\images.jpg";
但Tridion永远无法在那里找到那个文件。您应该设置从UploadBinaryContent
返回的路径:
string tempLocation;
using (StreamUploadClient streamClient = new StreamUploadClient())
{
FileStream objfilestream = new FileStream(@"\My Documents\My Poc\images.jpg",
FileMode.Open, FileAccess.Read);
tempLocation = streamClient.UploadBinaryContent("images.jpg", objfilestream);
}
BinaryContentData binaryContent = new BinaryContentData();
binaryContent.UploadFromFile = tempLocation;
请注意,Ryan's original code正是如此。