Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sitecore如何获取字段内的值';媒体';媒体项目的名称_Sitecore_Sitecore7.2 - Fatal编程技术网

Sitecore如何获取字段内的值';媒体';媒体项目的名称

Sitecore如何获取字段内的值';媒体';媒体项目的名称,sitecore,sitecore7.2,Sitecore,Sitecore7.2,更新2: 我仍在努力在服务器上保存图标 我现在做的是: Item Item=Sitecore.Context.Database.GetItem(imageId); var imageIconUrl=Sitecore.Resources.Images.GetThemedImageSource(item.Appearance.Icon,ImageDimension.id32x32); 如果(!string.IsNullOrEmpty(imageIconUrl)) { //从url下载图标 var i

更新2: 我仍在努力在服务器上保存图标

我现在做的是:

Item Item=Sitecore.Context.Database.GetItem(imageId);
var imageIconUrl=Sitecore.Resources.Images.GetThemedImageSource(item.Appearance.Icon,ImageDimension.id32x32);
如果(!string.IsNullOrEmpty(imageIconUrl))
{
//从url下载图标
var iconFullPath=“e:\\pngIcons\\excelIcon.png”;
var webClient=new System.Net.webClient();
var downloadPath=”http://serverName/“+imageIconUrl;
webClient.DownloadFile(downloadPath,iconFullPath);
}
变量
downloadPath
包含以下字符串:

http://serverName/sitecore/shell/themes/standard/~/media/E503BA48C89B422D8400393F1C7086A7.ashx?h=32&thn=1&w=32&db=master
最后我看到的是一个png文件,但里面什么都没有。我还复制了变量
downloadPath
中的字符串,并将其粘贴到浏览器中,我可以看到如下图标:

请告诉我我做错了什么。或者我如何保存图标。谢谢

原始问题:

sitecore媒体项有一个字段“
media
”。我说的是:

我想访问这个字段。原因是:


如果我使用例如
item.GetMediaStream()
访问它,那么我将获得完整的文件。我只想在服务器上保存这个小图标。可能吗

外观部分(属于标准模板)有一个名为
图标
的字段-您可以在这里修改项目的图标。还有一个名为
缩略图的字段
——您的excel图标就在那里

您可以通过编程方式访问该字段,只需记住它以两个下划线开头:
\u Icon

var iconField=item.Fields[“_图标];
var thumbnailField=item.Fields[“\uu缩略图”];
更新:如您所问,下面是将任一字段保存到驱动器文件中的代码。我已测试代码并确认已成功将图标从缩略图字段存储到文件中:

string mediatempath=“/sitecore/media library/Files/ExcelFile”;
字符串mediaFiedlName=“缩略图”//也可以是“\uuuu图标”
var item=Sitecore.Context.Database.GetItem(mediaItemPath);
var iconField=item.Fields[mediaFiedlName];
if(iconField.HasBlobStream)
{
变量thumb=(ImageField)iconField;
var bl=((MediaItem)thumb.MediaItem.InnerItem.Fields[“blob”];
Stream=bl.GetBlobStream();
字节[]缓冲区=新字节[8192];
使用(FileStream fs=File.Create(“D:\\you\u File\u name.ico”)//更改路径
{
整数长度;
做
{
长度=stream.Read(buffer,0,buffer.length);
fs.写入(缓冲区,0,长度);
}
而(长度>0);
fs.Flush();
fs.Close();
}
}
更新2:如果这没有帮助,我建议大家看看如何在Sitecore的媒体字段中生成图标。在最坏的情况下,您可以执行以下操作-右键单击该图标并查看其url。您将拥有类似于我分配给以下变量的内容:

stringurl=”http://test81/sitecore/shell/Applications/-/media/B4F61650CBE84EE396649602C0C48E1B.ashx?bc=White&db=master&h=128&la=en&mw=640&thn=1&vs=1&ts=b8046903-ae57-4f9d-9dd5-B626EE5EE90”;
当然,您的URL应该有您的主机名和媒体前缀以及其他参数。然后将Webclient与修改后的URL一起使用:

WebClient-WebClient=new-WebClient();
webClient.DownloadFile(url,“e:\\you\u file\u name.ico”);
不理想,但可能有效。请注意,上面的代码应该在已经登录的用户的上下文中工作,因此您需要在此之前授权您的Webclient(许多关于S.O.如何做到这一点的文章)


请回答这种方法是否对您有效(我花了相当长的时间在调试器中编写和测试代码,所以我想知道这是否有帮助)

以获取您可以使用的图标/缩略图

var icon = Sitecore.Resources.Media.MediaManager.GetThumbnailUrl(mediaItem);
获取缩略图的url

如果需要缩略图流,则需要使用
MediaData
对象。像这样:

var mediaItem = new MediaItem(item)
var mediaData = new MediaData(mediaItem);
var iconStream = mediaData.GetThumbnailStream();
if (iconStream.Length < 0) 
{
    // The stream is empty, its probably a file that Sitecore can't 
    // generate a thumbnail for. Just use the Icon
    var icon = item.Appearance.Icon;
}
var mediaItem=新的mediaItem(项目)
var mediaData=新的mediaData(mediatem);
var iconStream=mediaData.GetThumbnailStream();
如果(iconStream.Length<0)
{
//流为空,可能是Sitecore无法访问的文件
//为生成缩略图。只需使用图标
var icon=item.Appearance.icon;
}
这将获取连接到媒体项的实际媒体blob的图标或缩略图。如果您只需要Sitecore项目的图标,请使用Martins方法


如果流为空,则Sitecore无法为其生成缩略图,因此您可以仅使用媒体项模板的图标文件<代码>项目.外观.图标

但在上述情况下,如何在服务器上保存
iconStream
。我的意思是说,使用
System.IO
stream,我可以使用
.CopyTo(path)
然后保存流。是的,我使用
var stream=iconStream.stream很抱歉打扰您,但是如果文件不是图像文件,则使用此方法保存文件将不成功。文件大小为0 KB。例如,在Excel文件中。我认为这是因为您的文件没有生成缩略图,因此Sitecore将只使用与媒体类型关联的图标,在本例中为Excel文件。因此,您可以只使用items图标属性。我更新了答案以反映这一点。另外,如果流是空的,Martins的回答也会起作用。嗨,对不起,但是我仍然很难找到如何从图标下载流。如果您知道,请告诉我如何保存此
var icon=item.Appearance.icon
作为服务器上的映像。如何将服务器上的
var图标
保存为映像文件。谢谢刚刚用代码更新了我的答案,通过stream
var field=item将图标保存到磁盘。Fields[“\uu icon”]
不是blob