Sitecore - 在zip文件中上传两个具有相同名称但扩展名不同的文件

时间:2015-07-27 05:49:21

标签: sitecore sitecore7

我想上传2个同名但扩展名不同的文件,我想将它们放在一个zip文件中,然后使用sitecore将所有文件解压缩到sitecore媒体库中。
我使用的是sitecore 7.2。知道怎么做吗?

2 个答案:

答案 0 :(得分:6)

您可以使用Upload Files (Advanced)选项,然后在上传对话框中选择Unpack ZIP Archives

Upload Files (Advanced)

Unpack ZIP

将上传文件,将已归档的解压缩文件和生成的文件单独列为单独的项目:

Upload Files with same name

您对上述问题的一个问题是,Sitecore非常“灵活”( ahem ),它允许作为项目扩展,因此它无法解决这两个项目,因为它们都有相同的项目名称。

您可以在配置中设置Media.IncludeExtensionsInItemNames=true或扩展MediaRequestHandler以对扩展程序进行额外检查:Handling Duplicate Media Paths in Sitecore.

this previous Stackoverflow question中有关于此行为的更多信息。

注意:Unpack ZIP archives似乎无法在Sitecore 8,Update 4(可能全部)中运行。我会把它作为支持的错误提出来。

答案 1 :(得分:0)

您可以使用普通的asp.net文件上传将zip上传到Web服务器上的目录。

然后,您可以使用Sitecore ZipReader解压缩zip文件并创建媒体项目:

 using (ZipReader zipReader = new ZipReader(str))
 {
                foreach (ZipEntry entry in zipReader.Entries)
                {
                    if (entry.IsDirectory)
                    {
                        continue;
                    }
                    MediaUploadResult mediaUploadResult = new MediaUploadResult();
                    list.Add(mediaUploadResult);
                    mediaUploadResult.Path = FileUtil.MakePath(this.Folder, entry.Name, '/');
                    mediaUploadResult.ValidMediaPath = MediaPathManager.ProposeValidMediaPath(mediaUploadResult.Path);
                    MediaCreatorOptions mediaCreatorOption = new MediaCreatorOptions()
                    {
                        Language = this.Language,
                        Versioned = this.Versioned,
                        KeepExisting = !this.Overwrite,
                        Destination = mediaUploadResult.ValidMediaPath,
                        FileBased = this.FileBased,
                        Database = this.Database
                    };
                    MediaCreatorOptions mediaCreatorOption1 = mediaCreatorOption;
                    mediaCreatorOption1.Build(GetMediaCreatorOptionsArgs.UploadContext);
                    Stream stream = entry.GetStream();
                    mediaUploadResult.Item = MediaManager.Creator.CreateFromStream(stream, mediaUploadResult.Path, mediaCreatorOption1);
                }
            }
    }