如何下载 Sitecore 图片
How to download Sitecore Images
var database = Database.GetDatabase(“master”);
var images = database.SelectItems(“/sitecore/media library/your image folder/descendant::*[@@templatekey=’jpeg’]”);
foreach (var image in images)
{
var mediaItem = (MediaItem)image;
var media = MediaManager.GetMedia(mediaItem);
var stream = media.GetStream();
using (var targetStream = File.OpenWrite(Path.Combine(“your data path”, image.Name + “.jpeg” )))
{
stream.CopyTo(targetStream);
targetStream.Flush();
}
}
我是 Sitecore 的新手,任何人都可以帮助我如何将图像从 Sitecore 下载到我们 PC 的本地文件夹中,当我搜索时,我找到了一个代码但无法正常工作。错误是找不到路径的一部分'E:\Images\RedTorch.jpeg'
这是一个不错的博客 post,描述了如何从媒体库中的特定文件夹下载图像:Save all images of a media library folder to disk。
重要:请记住,IIS 进程使用的用户必须对 c:\tmp
目录(或您使用的任何其他目录)具有写入权限。
以及那里的代码:
var database = Database.GetDatabase("master");
var images = database.SelectItems("/sitecore/media library/your image folder/descendant::*[@@templatekey='jpeg']");
foreach (var image in images)
{
var mediaItem = (MediaItem)image;
var media = MediaManager.GetMedia(mediaItem);
var stream = media.GetStream();
using (var targetStream = File.OpenWrite(Path.Combine("c:\tmp", image.Name + ".jpeg" )))
{
stream.CopyTo(targetStream);
targetStream.Flush();
}
}
编辑:
从您的评论来看,您似乎不想将媒体项目保存在服务器硬盘上,而是想将它们下载到用于浏览网站的计算机上。对吗?
在那种情况下,您可以使用下面的代码。它将生成所有媒体项目的 zip,这些媒体项目是所选文件夹的直接子项,并允许用户下载此 zip:
string tempFolderPath = Sitecore.Configuration.Settings.TempFolderPath;
tempFolderPath = HttpContext.Current.Server.MapPath(tempFolderPath);
string zipName = "media" + DateTime.Now.Ticks + ".zip";
ZipWriter zipWriter = new ZipWriter(Path.Combine(tempFolderPath, zipName));
var database = Database.GetDatabase("master");
var images = database.SelectItems("/sitecore/media library/your folder/*");
foreach (var image in images)
{
if (MediaManager.HasMediaContent(image))
{
var mediaItem = (MediaItem) image;
var media = MediaManager.GetMedia(mediaItem);
var stream = media.GetStream();
zipWriter.AddEntry(mediaItem.Name + "." + mediaItem.Extension, stream.Stream);
}
}
zipWriter.Dispose();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/zip";
HttpContext.Current.Response.AppendHeader("Content-Disposition", string.Format("inline;filename=\"{0}\"", zipName));
HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.OK;
HttpContext.Current.Response.BufferOutput = true;
using (StreamReader sr = new StreamReader(Path.Combine(tempFolderPath, zipName)))
{
sr.BaseStream.CopyTo(HttpContext.Current.Response.OutputStream);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
}
您的示例中的代码看起来不错,并且与 Marek 的回答大致相同,这里的问题可能是您正在使用 Path.Combine 来包含一个可能尚不存在的新文件夹(基于在您收到的错误消息中:"Could not find a part of the path").
如果您将在写入文件之前添加此行(首先创建一个变量,保存您最终的完整路径字符串),您可以确保在将文件写入磁盘之前所有目录都存在:
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
var database = Database.GetDatabase(“master”);
var images = database.SelectItems(“/sitecore/media library/your image folder/descendant::*[@@templatekey=’jpeg’]”);
foreach (var image in images)
{
var mediaItem = (MediaItem)image;
var media = MediaManager.GetMedia(mediaItem);
var stream = media.GetStream();
using (var targetStream = File.OpenWrite(Path.Combine(“your data path”, image.Name + “.jpeg” )))
{
stream.CopyTo(targetStream);
targetStream.Flush();
}
}
我是 Sitecore 的新手,任何人都可以帮助我如何将图像从 Sitecore 下载到我们 PC 的本地文件夹中,当我搜索时,我找到了一个代码但无法正常工作。错误是找不到路径的一部分'E:\Images\RedTorch.jpeg'
这是一个不错的博客 post,描述了如何从媒体库中的特定文件夹下载图像:Save all images of a media library folder to disk。
重要:请记住,IIS 进程使用的用户必须对 c:\tmp
目录(或您使用的任何其他目录)具有写入权限。
以及那里的代码:
var database = Database.GetDatabase("master");
var images = database.SelectItems("/sitecore/media library/your image folder/descendant::*[@@templatekey='jpeg']");
foreach (var image in images)
{
var mediaItem = (MediaItem)image;
var media = MediaManager.GetMedia(mediaItem);
var stream = media.GetStream();
using (var targetStream = File.OpenWrite(Path.Combine("c:\tmp", image.Name + ".jpeg" )))
{
stream.CopyTo(targetStream);
targetStream.Flush();
}
}
编辑:
从您的评论来看,您似乎不想将媒体项目保存在服务器硬盘上,而是想将它们下载到用于浏览网站的计算机上。对吗?
在那种情况下,您可以使用下面的代码。它将生成所有媒体项目的 zip,这些媒体项目是所选文件夹的直接子项,并允许用户下载此 zip:
string tempFolderPath = Sitecore.Configuration.Settings.TempFolderPath;
tempFolderPath = HttpContext.Current.Server.MapPath(tempFolderPath);
string zipName = "media" + DateTime.Now.Ticks + ".zip";
ZipWriter zipWriter = new ZipWriter(Path.Combine(tempFolderPath, zipName));
var database = Database.GetDatabase("master");
var images = database.SelectItems("/sitecore/media library/your folder/*");
foreach (var image in images)
{
if (MediaManager.HasMediaContent(image))
{
var mediaItem = (MediaItem) image;
var media = MediaManager.GetMedia(mediaItem);
var stream = media.GetStream();
zipWriter.AddEntry(mediaItem.Name + "." + mediaItem.Extension, stream.Stream);
}
}
zipWriter.Dispose();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/zip";
HttpContext.Current.Response.AppendHeader("Content-Disposition", string.Format("inline;filename=\"{0}\"", zipName));
HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.OK;
HttpContext.Current.Response.BufferOutput = true;
using (StreamReader sr = new StreamReader(Path.Combine(tempFolderPath, zipName)))
{
sr.BaseStream.CopyTo(HttpContext.Current.Response.OutputStream);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
}
您的示例中的代码看起来不错,并且与 Marek 的回答大致相同,这里的问题可能是您正在使用 Path.Combine 来包含一个可能尚不存在的新文件夹(基于在您收到的错误消息中:"Could not find a part of the path").
如果您将在写入文件之前添加此行(首先创建一个变量,保存您最终的完整路径字符串),您可以确保在将文件写入磁盘之前所有目录都存在:
Directory.CreateDirectory(Path.GetDirectoryName(filePath));