Ограничение размера загрузки и типа файла для медиа-пикета umbraco - PullRequest
0 голосов
/ 27 января 2020

Попытка выбрать мультимедиа через dialogService, как это

  dialogService.mediaPicker({
            startNodeId: undefined,
            multiPicker: false,
            cropSize: undefined,
            showDetails: true,
            callback: function (data) {

             }

Есть ли способ настроить эту конфигурацию средства выбора медиаконтента и разрешить только определенные типы мультимедиа, а также указать размер

1 Ответ

1 голос
/ 29 января 2020

Я думаю, что лучшим вариантом будет создание обработчика событий для события Saving MediaService и проверка ваших условий перед сохранением файла.

Дополнительная информация здесь: https://our.umbraco.com/Documentation/Getting-Started/Code/Subscribing-To-Events/

public class RestrictMediaTypeAndSize : ApplicationEventHandler
    {

        protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
        {
            MediaService.Saving += MediaService_Saving;
        }

        private void MediaService_Saving(IMediaService sender, Umbraco.Core.Events.SaveEventArgs<Umbraco.Core.Models.IMedia> e)
        {
            foreach (var media in e.SavedEntities)
            {
                //you can check for other types of content
                if (media.ContentType.Alias == Image.ModelTypeAlias)
                {
                    var fileExtension = GetFileExtension(media);
                    if (!HasAllowedExtension(fileExtension))
                    {
                        //we cancel the saving process
                        e.Cancel = true;

                        //we send a message to the user.
                        var errorMessage = new EventMessage("Error", $"Files of type {fileExtension} are not allowed.");
                        e.Messages.Add(errorMessage);

                        //we found an error so we exit the foreach loop to finish the execution.
                        break;
                    }

                    if (!HasValidDimensions(media))
                    {
                        //we cancel the saving process
                        e.Cancel = true;

                        //we send a message to the user.
                        var errorMessage = new EventMessage("Error", "Files with a size of (whatever your restrictions) are not allowed.");
                        e.Messages.Add(errorMessage);

                        //we found an error so we exit the foreach loop to finish the execution.
                        break;
                    }
                }
            }
        }

        private bool HasAllowedExtension(string fileExtension)
        {
            string[] allowedExtensions = new string[] { ".jpg", ".png" };
            return allowedExtensions.Contains(fileExtension);
        }

        private bool HasValidDimensions(IMedia media)
        {
            //take the image dimensions for the properties populated when you upload the file.
            var height = (int)media.Properties["umbracoHeight"].Value;
            var width = (int)media.Properties["umbracoWidth"].Value;

            //check for whatever conditions you want.
            return height < 1000 && width < 2000;
        }

        private string GetFileExtension(IMedia media)
        {
            //The umbracoFile Propery is a Json object and we need the src property from it which is the file path.
            var filePath = JObject.Parse(media.Properties["umbracoFile"].Value.ToString()).SelectToken("$.src").Value<string>();
            return System.IO.Path.GetExtension(filePath);
        }
    }
...