gpt4 book ai didi

c# - 以编程方式创建图像并将其作为字节 [] 数据从 Web 服务检索为媒体项存储在 Umbraco 中

转载 作者:太空狗 更新时间:2023-10-30 01:19:20 29 4
gpt4 key购买 nike

我已经能够将一些预定的网络服务调用集成到我的 Umbraco 网站中,该网站使用来自网络服务的响应来更新我网站上的一些内容。我现在可以处理文本和其他一些内容,但我的主要问题是我应该如何处理从 Web 服务以 byte[] 格式传送的图像?

关于一点上下文,我正在开发的网站使用网络服务调用来检索我们桌面软件的用户在他们的机器上创建的产品的详细信息。这些产品中的每一个都通过网络服务调用拉入我的 Umbraco 站点,并在产品的父节点下创建为单独的产品页面。

Products > Product

每个产品都有几个属性,例如 ID、名称、注释和图像集合。调用网络服务后,我将使用以下代码创建这些页面:

//Construct Service Request
svc = new StaticDataWebServiceSoapClient();
var response = svc.GetProducts(ref compressionSoapHeader,ref managedUserHeader);

//Umbraco Content Services
int rootID = 1117;
IContentService cs = ApplicationContext.Current.Services.ContentService;
var remove = cs.GetChildren(rootID).Where(x => x.ContentType.Alias == "product");
foreach (var child in remove)
{
cs.Delete(child);
}
foreach(var product in response){
var item = cs.CreateContent(product.ContinentName, rootID, "product");
//Set the properties using the SetValue method, passing in the alias of the property and the value to assign to it
item.SetValue("continentId", product.Id);
item.SetValue("continentName", product.ProductName);
item.SetValue("continentNotes", product.Notes);
foreach (var image in product.Images)
{
??? destination.SetValue("ProductImages", image._Image); ???
image.Caption;
image.FileName;
image.ImageId;
image.KeywordID;
}
cs.SaveAndPublishWithStatus(item);
}

正如您从代码中看到的那样,每个产品都有多个与之关联的图像,我也想将它们拉入站点并与正在创建的产品页面相关联。我该怎么做呢?我是否需要使用媒体服务和特定的数据类型,或者这种结构是否可以轻松地适应多媒体选择器?

最佳答案

您可能会发现,一旦检索到图像并为每个图像创建一个新媒体项,然后使用基于诸如 Multiple Media Picker 数据类型之类的属性将它们与产品关联起来,最简单的方法就是遍历这些图像你注意到了。

因为此数据类型将其值存储为逗号分隔的 id 列表,您可以使用类似以下的内容:

        // Setup
IContentService cs = ApplicationContext.Current.Services.ContentService;
var mediaService = ApplicationContext.Current.Services.MediaService;
int mediaRootId = 1111; // Replace with the id of your media parent folder


// Replace the image looping logic with the following:

// MultiMediaPicker stores it's values as a commma separated string of ids.
string imageIds = string.Empty;

foreach (var image in product.Images)
{
var fileName = image.FileName; // Assumes no path information, just the file name
var ext = fileName.Substring(fileName.LastIndexOf('.') + 1).ToLower();

if (!UmbracoConfig.For.UmbracoSettings().Content.DisallowedUploadFiles.Contains(ext))
{
var mediaType = Constants.Conventions.MediaTypes.File;

if (UmbracoConfig.For.UmbracoSettings().Content.ImageFileTypes.Contains(ext))
mediaType = Constants.Conventions.MediaTypes.Image;

var f = mediaService.CreateMedia(fileName, mediaRootId, mediaType);
// Assumes the image._Image is a Stream - you may have to do some extra work here...
f.SetValue(Constants.Conventions.Media.File, fileName, (Stream)image._Image); // Real magic happens here.

mediaService.Save(f);

imageIds += (imageIds.Length > 0 ? "," : "") + f.Id;
}
}

// Get the relevant property on the new item and save the image list to it.
var imagesProp = item.Properties.Where(p => p.Alias == "productImages").FirstOrDefault();
imagesProp.Value = imageIds;

注意 - 我还没有测试这段代码,所以 ymmv。

关于c# - 以编程方式创建图像并将其作为字节 [] 数据从 Web 服务检索为媒体项存储在 Umbraco 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23385686/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com