首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像将以附加有图像名称的TCM id进行发布

图像将以附加有图像名称的TCM id进行发布
EN

Stack Overflow用户
提问于 2012-08-03 15:34:28
回答 3查看 986关注 0票数 5

发布模式-静态

我正在尝试发布图像,但问题是每当我发布这些图像时,它们的TCM都会附加到它们的名称后面(即,如果图像名称是example,而它的TCM类似于tcm:1-115,则图像文件名变成example_tcm1-115)。

我写了以下代码:

代码语言:javascript
复制
public void Transform(Engine engine, Package package)
{
    Filter MMCompFilter = new Filter();
    MMCompFilter.Conditions["ItemType"] = Tridion.ContentManager.ItemType.Component;
    Folder folder = engine.GetObject("tcm:1-1-2") as Folder;

    foreach (Component MMcomp in folder.GetItems(MMCompFilter))
    {
        Binary binary = engine.PublishingContext.RenderedItem.AddBinary(MMcomp);
        String binaryurl = binary.Url;
        char[] array = binaryurl.ToCharArray();
        Array.Reverse(array);
        string obj = new string(array);
        string final = newImagepath(obj);
        char[] array2 = final.ToCharArray();
        Array.Reverse(array2);
        string obj2 = new string(array2);

        package.PushItem("Image", package.CreateHtmlItem(obj2));
    }

    public string newImagepath(string filePath)
    {
        int formatIndex =filePath.IndexOf(".");
        string format= filePath.Substring(0,formatIndex);
        int finalPath=filePath.IndexOf("_");
        string newPath=filePath.Substring((finalPath+1));
        return (format+"."+newPath);
    }
}

我想发布没有附加中医URI的图像。请建议如何做这件事。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-06 16:49:13

最简单的总是最好的。

在您的TBB中,只需将单个镜像推送到包中:

代码语言:javascript
复制
package.PushItem(package.CreateMultimediaItem(component.Id));

然后使用"PublishBinariesInPackage“TBB将这些图像发布到演示服务器。

票数 5
EN

Stack Overflow用户

发布于 2012-08-03 16:16:34

克里斯·萨默斯写了一篇非常好的关于这个主题的文章http://www.urbancherry.net/blogengine/post/2010/02/09/Unique-binary-filenames-for-SDL-Tridion-Multimedia-Components.aspx

这基本上是一件非常简单的事情,但可能会产生巨大的后果,你应该意识到!

您只能在单个位置发布具有特定文件名的二进制文件一次(并且只能将二进制文件发布到演示服务器上的单个位置,除非您将其作为变体发布)。然而,在CMS中,很容易在不同的文件夹中创建具有相同二进制文件名的多媒体组件,如果它们发布到相同的位置,则会发生冲突。这就是为什么在默认情况下SDL Tridion会在文件名后附加TCM URI,以使其具有唯一性。

票数 7
EN

Stack Overflow用户

发布于 2012-08-03 18:00:25

您可以使用RenderedItem.AddBinary方法来实现此目标。该方法的一些重载版本允许将图像作为流发布,并传递任何文件名。例如:

代码语言:javascript
复制
public Binary AddBinary(
    Stream content,
    string filename,
    string variantId,
    string mimeType
)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11791268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档