首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何下载海洋图片

如何下载海洋图片
EN

Stack Overflow用户
提问于 2015-02-05 09:19:48
回答 2查看 1.5K关注 0票数 0
代码语言:javascript
复制
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下载到我们个人电脑的本地文件夹,当我搜索时,我发现了一个代码,但没有工作。错误是找不到路径'E:\Images\RedTorch.jpeg‘的一部分

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-05 09:24:21

这里有一篇很好的博客文章,描述了如何从媒体库中的特定文件夹下载图片:将媒体库文件夹的所有图像保存到磁盘

重要:请记住,IIS使用的用户必须对c:\tmp目录(或您使用的任何其他目录)具有写访问权限。

接下来的代码是:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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();
}
票数 1
EN

Stack Overflow用户

发布于 2015-02-06 00:11:36

示例中的代码看起来不错,与Marek的回答大致相同,这里的问题可能是,您正在使用Path.Combine来包含一个可能还不存在的新文件夹(基于您得到的错误消息:“无法找到路径的一部分”)。

如果要在写入文件之前添加这一行(首先创建一个变量,保存最终和完整的路径字符串),则可以确保在将文件写入磁盘之前存在所有目录:

代码语言:javascript
复制
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28340195

复制
相关文章

相似问题

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