示例#1
0
        /// <summary>
        ///     Отрисовывает переданный <see cref="IFileDescriptor" /> как контент с указанным MIME
        /// </summary>
        /// <param name="context"> </param>
        public override void Render(IMvcContext context)
        {
            var descriptor = context.ActionResult as IFileDescriptor;

            if (null == descriptor)
            {
                throw new QorpentException("Тип результата NULL или не совместим с FileDescriptorRender");
            }
            if (descriptor.Role.IsNotEmpty())
            {
                var auth = Application.Roles.IsInRole(context.User.Identity, descriptor.Role);
                if (!auth)
                {
                    throw new QorpentSecurityException("Доступ к файлу не авторизован " + auth);
                }
            }
            if (descriptor.NeedDisposition)
            {
                var filename  = descriptor.Name;
                var extension = Path.GetExtension(filename);
                if (string.IsNullOrWhiteSpace(extension))
                {
                    extension = MimeHelper.GetExtensionByMime(descriptor.MimeType);
                    filename  = filename + extension;
                }
                context.FileDisposition = filename;
            }

            context.ContentType = descriptor.MimeType;
            if (descriptor.IsStream)
            {
                context.WriteOutStream(descriptor.GetStream());
            }
            else
            {
                if (descriptor.Data != null)
                {
                    context.WriteOutStream(new MemoryStream(descriptor.Data));
                }
                else
                {
                    context.Output.Write(descriptor.Content);
                }
            }
        }