Загруженные медиа-файлы 404 на производстве, но появляются спустя несколько часов - PullRequest
0 голосов
/ 12 июня 2019

Мы создали пользовательский интерфейс, позволяющий пользователям публиковать темы и загружать изображения поверх Sitecore 9. Недавно мы переместили созданный пользователем контент в его собственную базу данных, поэтому файлы мультимедиа больше не находятся в надлежащем sitecore ».медиа галерея ».Кроме того, хранилище файлов находится в сетевой папке.Загрузка изображений работает просто отлично.Это сразу после того, где проблема лежит.

После загрузки изображения наш оставшийся API возвращает URL-адрес мультимедиа из MediaManager.GetMediaUrl (itemId).Это тоже работает.Он возвращает действительный URL, он правильно отформатирован и должен разрешить.К сожалению, в течение некоторого времени после этого, URL-адрес сайта исполняет танец 302 на нашей странице 404.

Я могу видеть изображение через редактор содержимого, и наш пользовательский обработчик содержимого внедряет узел папки изображений в основную и веб-базы данных.

Почему менеджер ссылок сможет найти 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 ().

...