itsathere Ответов: 2

Увеличьте размер загружаемого файла в ASP.NET сердечник


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

Если у кого-то есть идея, пожалуйста, поделитесь

Что я уже пробовал:

Я уже пробовал эту ссылку

2 Ответов

Рейтинг:
17

Member 12399880

Я действительно наткнулся на ваш вопрос, когда сам искал решение сегодня утром. Кто-то другой прислал мне ссылку, и это дало мне достаточно, чтобы заставить меня идти: iis - увеличение макс. длина запроса в asp.net 5 (vNext) - переполнение стека[^]

Мой был RC1 (у меня были проблемы с портированием на RC2), так что вам, возможно, придется немного подправить, но мой web.config оказался:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <httpRuntime executionTimeout="100000" maxRequestLength="214748364" />
  </system.web>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
    </handlers>
    <!--<httpPlatform processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" forwardWindowsAuthToken="false" startupTimeLimit="3600" stdoutLogEnabled="false" />-->
    <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="4294967295" />
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>


Рейтинг:
1

Member 12003880

В случае приложения .NET CORE настройка может быть выполнена гораздо более простым способом. Самый простой способ сделать это-добавить атрибут RequestSizeLimit в модель. Например:

[RequestSizeLimit(5*1024*1024)]     // set the maximum file size limit to 5 MB
public class InputModel 
{
    ...
}


Это также поможет принять атрибут проверки для проверки того, что размер загруженного файла ограничен конкретным размером, который вы ищете. Например:
namespace MyApp.Validators
{
    using Microsoft.AspNetCore.Http;
    using System.ComponentModel.DataAnnotations;

    [AttributeUsage(
        validOn: AttributeTargets.Field | AttributeTargets.Property, 
        AllowMultiple = false, 
        Inherited = true)]
    public class MyUploadFileSizeValidator
        : ValidationAttribute
    {
        public MyUploadFileSizeValidator(long sizeInBytes)
        {
            this.SizeInBytes = sizeInBytes;
        }

        public long SizeInBytes { get; private set; }


        /// <summary>  
        ///     Validates the specified value with respect to the current validation attribute
        /// </summary>  
        /// <param name="value">the value to validate</param>  
        /// <returns>Returns - true to specify size is okay.</returns> 
        public override bool IsValid(object value)
        {
            bool isValid = false;

            // NOTE: Use HttpPostedFileBase instead of IFormFile in ASP.NET MVC
            if (value is IFormFile file)
            {
                isValid = file.Length <= this.SizeInBytes;
            }

            return isValid;
        }

    }
}


а затем просто используйте его на свойстве модели. Итак, ваша модель будет выглядеть примерно так:

[RequestSizeLimit(5*1024*1024)]     // set the maximum file size limit to 5 MB
public class InputModel
{
    [Required(ErrorMessage = "Please select an image file to upload.")]
    [MyUploadFileSizeValidator(sizeInBytes: 5 * 1024 * 1024, 
                               ErrorMessage = "Image filesize should be smaller than 5 MB")]
    [Display(Name = "Profile Photo")]
    public IFormFile ProfilePhoto { get; set; }
}


Надеюсь, это поможет.


Richard MacCutchan

Почему вы опубликовали это дважды? Пожалуйста, удалите тот, который не является правильным.

jaket-cp

Также это ответ на вопрос сделанный в 2016 году :)

Member 12003880

Ну и что? Мой ответ был с намерением помочь любому, кто может искать то же самое - в отношении .NET CORE 2.1 или выше.

jaket-cp

ладно - согласен с вами полностью - новые правила, новая игра :)
счастливое кодирование

CHill60

До тех пор, пока плакат приносит что-то новое в дискуссию, то воскрешение старых постов с новыми решениями приемлемо (где-то есть сообщение от Криса об этом).

jaket-cp

ну ладно - новые правила :)