【发布时间】:2023-03-07 09:20:01
【问题描述】:
我想上传 2 个名称相同但扩展名不同的文件,我想将它们放在一个 zip 文件中,然后使用 sitecore 将所有文件提取到 sitecore 媒体库中。
我正在使用站点核心 7.2。知道怎么做吗?
【问题讨论】:
我想上传 2 个名称相同但扩展名不同的文件,我想将它们放在一个 zip 文件中,然后使用 sitecore 将所有文件提取到 sitecore 媒体库中。
我正在使用站点核心 7.2。知道怎么做吗?
【问题讨论】:
您可以使用Upload Files (Advanced) 选项,然后在上传对话框中选择Unpack ZIP Archives。
文件将被上传,存档的解压文件和生成的文件分别作为单独的项目列出:
您遇到的上述问题是 Sitecore 非常“灵活”(ahem),它允许作为项目扩展,因此它无法解决这两个项目,因为它们都有相同的项目名称。
您可以在配置中设置Media.IncludeExtensionsInItemNames=true 或扩展MediaRequestHandler 以对扩展进行额外检查:Handling Duplicate Media Paths in Sitecore.
this previous Stackoverflow question 中有关于此行为的更多信息。
注意:Unpack ZIP archives 似乎无法在 Sitecore 8 Update 4(可能全部)中运行。我会在支持下将其作为一个错误提出。
【讨论】:
您可以使用普通的 asp.net 文件上传将 zip 文件上传到网络服务器上的目录。
然后您可以使用 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);
}
}
}
【讨论】: