我们建立了一个自定义的前端,供用户发布线程并在Sitecore 9上载图像。最近,我们将用户生成的内容移至其自己的数据库中,因此媒体文件不再位于适当的sitecore中,媒体库”。另外,文件存储在网络共享上。上传图片效果很好。问题出在眼前。
在上传图片时,我们的其余api从MediaManager.GetMediaUrl(itemId)返回媒体网址。这也有效。它返回一个有效的URL,它的格式正确并且应该解析。不幸的是,一段时间之后,该网址使sitecore在我们的404页面上跳了302秒。
我可以通过内容编辑器看到图像,并且我们的自定义内容处理程序将图像文件夹节点注入到主数据库和Web数据库中。
为什么链接管理器能够找到URL,但是图像不可用?我昨天下午上传了一些内容,今天早上检查时,该图像现在可以在网站上找到。任何信息或建议,表示赞赏。
我尝试多次保存图像,希望这可能触发任何导致图像显示的神秘Sitecore事件。由于没有单独的数据库,因此没有发布,因此我无法尝试。我删除了所有版本,认为它不能默认为特定语言。没有。似乎只有时间使图像可见。下面的代码工作正常。我只是将其放在此处以显示一些工作。
public MediaItem UploadSimpleMedia(MediaGallerySimpleUploadRequest request)
{
try
{
var destinationFolder = request.ParentItemId != null
? _content.GetItem<Item>(request.ParentItemId.Value)
: _content.GetItem<Item>(_publicLibraryPath + "/embeded");
var name = !string.IsNullOrEmpty(request.Name)
? ItemUtil.ProposeValidItemName(request.Name)
: ItemUtil.ProposeValidItemName(request.Files[0].FileName);
var creator = new MediaCreator();
var tags = request.Tags != null ? request.Tags.Split(',') : new string[0];
var tagIds = _tagService.GetTagIds(tags);
var tagIdString = string.Join(",", tagIds);
var options = new MediaCreatorOptions()
{
AlternateText = request.Name,
FileBased = true,
IncludeExtensionInItemName = false,
Versioned = false,
Destination = $"{destinationFolder.Paths.Path}/{name}",
Database = Factory.GetDatabase("content")
};
using (new SecurityDisabler())
using (new DatabaseCacheDisabler())
{
MediaItem item = creator.CreateFromStream(request.Files[0].InputStream, request.Files[0].FileName, options);
item.BeginEdit();
item.InnerItem["Title"] = request.Name;
item.InnerItem["Description"] = request.Description;
item.InnerItem["__Semantics"] = tagIdString;
// Sitecore won't calculate MIME Type or File Size automatically unless you upload directly
// to the Sitecore Media Library. We're uploading in-place for private groups for permission inheritance
// and now because of indexing, they are getting uploaded to /Community/Gallery/Files if not private.
item.InnerItem["Size"] = request.Files[0].ContentLength.ToString();
item.InnerItem["Mime Type"] = request.Files[0].ContentType;
item.EndEdit();
// Just pausing here to reflect on why Sitecore is so sexily complicated
// that it takes time to display an image on the CD, but has no problem giving
// up the media url
CacheManager.GetHtmlCache(Sitecore.Context.Site);
_searchService.RefreshIndex(item.ID.Guid);
var fromDatabase = _content.GetItem<Item>(item.ID.Guid);
return fromDatabase;
}
}
catch (Exception ex)
{
_logger.Error(this.GetType().AssemblyQualifiedName, ex);
_logger.Trace(ex.StackTrace);
}
return null;
}
在我们的自定义日志或默认的Sitecore日志中,我都没有收到任何错误消息。图像无法解析。是缓存吗?我什至通过调用CacheManager.ClearAllCaches()来破坏所有缓存。