我收到“不支持给定路径的格式。”当我只是尝试从我的SDL Tridion 2011 SP1下载多媒体图像时,下面是我得到的路径,不知道“N:”等即将到来。
D:\ delete \ Images \ N:\ dmc.FlipMedia.Clients.TestCMS \ 2009_WorkInProgress \ creatives \ 05_May \ 16岁以下儿童免费访问英国\ assets_graphics \ jpg \ Kids_go_free_385x306.jpg
以下是代码:
public static void GetBinaryFromMultimediaComponent(string tcm, CoreServiceClient client, StreamDownloadServiceClient streamDownloadClient)
{
ComponentData multimediaComponent = client.ReadItem(tcm) as ComponentData;
// Generate you own file name, and file location
string file = "D:\\delete\\Images\\" + multimediaComponent.BinaryContent.Filename;//Here I am getting above path
// Write out the existing file from Tridion
FileStream fs = File.Create(file);//Here getting the exception
byte[] binaryContent = null;
if (multimediaComponent.BinaryContent.FileSize != -1)
{
Stream tempStream = streamDownloadClient.DownloadBinaryContent(tcm);
var memoryStream = new MemoryStream();
tempStream.CopyTo(memoryStream);
binaryContent = memoryStream.ToArray();
}
fs.Write(binaryContent, 0, binaryContent.Length);
fs.Close();
}
请建议!!
修改:
我使用Nuno建议获得文件名,但是前进到
Stream tempStream = streamDownloadClient.DownloadBinaryContent(tcm);
我收到以下错误,对此有何建议?
The content type multipart/related; type="application/xop+xml";start="";boundary="uuid:5f66d04b-76d3-4d3a-b8e3-b7b91e00ed32+id=2";start-info="text/xml" of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 595 bytes of the response were: ' --uuid:5f66d04b-76d3-4d3a-b8e3-b7b91e00ed32+id=2 Content-ID: Content-Transfer-Encoding: 8bit Content-Type: application/xop+xml;charset=utf-8;type="text/xml" '.
答案 0 :(得分:5)
正如您现在可能已经想到的那样,string file = "D:\\delete\\Images\\" + multimediaComponent.BinaryContent.Filename;
会附加完整的文件名(包括路径),因此会生成错误的路径。
尝试使用string file = "D:\\delete\\Images\\" + Path.GetFilename(multimediaComponent.BinaryContent.Filename);
答案 1 :(得分:0)
这样做: -
Stream tempStream = streamDownloadClient.DownloadBinaryContent(tcmId);
MemoryStream memoryStream = new MemoryStream();
int b;
do
{
b = tempStream.ReadByte();
memoryStream.WriteByte((byte)b);
} while (b != -1);
binaryContent = memoryStream.ToArray();