Страница не отображалась, поскольку объект запроса слишком велик. в .Net Core 2.1 - PullRequest
0 голосов
/ 10 ноября 2019

Возникают проблемы при загрузке файлов на сервер через API. При попытке загрузить изображение размером 8 Мб на сервер из Почтальона. В первый раз, я пытаюсь загрузить это показывает «Страница не была отображена, потому что объект запроса слишком велик». Но странная вещь: «Когда я загружаю маленькое изображение размером, например, 300 КБ, оно загружает и пытается загрузить следующее изображение размером 8 МБ и через 3 или 5 минут я получаю ту же ошибку.

Мой код загрузки

[Route("api/[controller]")]
public class UploadImageController : Controller
{
    private IHostingEnvironment _environment;
    public UploadImageController(IHostingEnvironment environment)
    {
        _environment = environment;
    }
    internal void IsExists(string filepath)
    {
        if (!Directory.Exists(_environment.WebRootPath + "\\media"))
        {
            Directory.CreateDirectory(_environment.WebRootPath + "\\media");
        }
        if (!Directory.Exists(_environment.WebRootPath + "\\media\\" + filepath))
        {
            Directory.CreateDirectory(_environment.WebRootPath + "\\media\\" + filepath);
        }
    }
    internal string GetNewFileName(string filenamestart, string fullname)
    {
        Char delimiter = '.';
        string fileExtension;
        string strFileName = string.Empty;
        strFileName = DateTime.Now.ToString().
            Replace(" ", string.Empty).
            Replace("/", "-").Replace(":", "-");
        fileExtension = fullname.Split(delimiter).Last();
        Random ran = new Random();
        strFileName = $"{ filenamestart}_{ran.Next(0, 100)}_{strFileName}.{fileExtension}";
        return strFileName;
    }
    private bool IsValidExtension(IFormFile filename)
    {
        bool isValid = false;
        Char delimiter = '.';
        string fileExtension;
        string[] imgTypes = new string[] { "png", "jpg", "gif", "jpeg" };
        fileExtension = filename.FileName.Split(delimiter).Last();
        // fileExtension = substrings[substrings.Length - 1].ToString();
        int fileType = 0;
        if (imgTypes.Contains(fileExtension.ToLower()))
        {
            fileType = 1;
        }

        switch (fileType)
        {
            case 1:
                if (imgTypes.Contains(fileExtension.ToLower()))
                {
                    isValid = true;
                }
                break;
            default:
                isValid = false;
                break;
        }
        return isValid;
    }
    [HttpPost]
    // GET: api/<controller>
    [Route("UploadapiImage")]
    [RequestFormLimits(MultipartBodyLengthLimit = 209715200)]
    [RequestSizeLimit(209715200)]
    public async Task<IActionResult> UploadapiImage()
    {
        try
        {

            var Files=Request.Form.Files;
            if (Files.Count == 0)
            {
                return Ok(Json(""));
            }
            IsExists("Mobile");
            //var file = Convert.FromBase64String(objUploadModel.File);
            string uploads = _environment.WebRootPath + "\\media\\Mobile";
            int i = 0;
            string[] strFileNames = new string[Files.Count];
            foreach (var file in Files)
            {
                if (IsValidExtension(file))
                {
                    string imagename = GetNewFileName("Mobile", Files[i].FileName);
                    string fullpath = uploads + "\\" + imagename;
                    using (FileStream fileStream = System.IO.File.Create(fullpath))
                    {
                        await Task.Run(() => Files[i].CopyToAsync(fileStream));
                        fileStream.Flush();
                        fileStream.Close();
                    }

                    strFileNames[i] = "\\media\\Mobile\\" + imagename;
                }
                else
                {
                    strFileNames[i] = "";
                }
                i++;
            }
            return Ok(strFileNames);

        }
        catch (Exception ex)
        {
            return Ok("Exception from Api");
        }

    }
}

В Startup.cs

services.Configure<FormOptions>(x =>
        {
            x.ValueLengthLimit = int.MaxValue;
            x.MultipartHeadersLengthLimit = int.MaxValue;
            x.MultipartBodyLengthLimit = int.MaxValue;
        });

В веб-конфигурации.

<requestFiltering>

    <requestLimits maxAllowedContentLength="1073741824" />  

  </requestFiltering>

Я пытаюсь вести логи на сервере и IIS Я не нашел ни одногоинформация В журналах IIS записывается

#Software: Microsoft Internet Information Services 10.0

Версия: 1.0

Дата: 2019-11-10 05: 59: 05

Поля: дата и время s-ipcs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs (User-Agent) cs (Referer) sc-status sc-substatus sc-win32-status time -used

2019-11-10 05:59:05 10.0.0.4 POST / api / UploadImage / UploadapiImage - 443 - 27.34.104.230 Mozilla / 5.0 + (Windows + NT + 10.0; + Win64; + x64) + AppleWebKit / 537.36 +(KHTML, + like + Gecko) + Chrome / 78.0.3904.97 + Safari / 537.36 - 413 0 0 1636

Моя версия IIS на сервере показана на изображении.

enter image description here

1 Ответ

0 голосов
/ 11 ноября 2019

Почему у меня возникает проблема («Страница не отображалась, поскольку объект запроса слишком велик») на моем веб-сайте, Настройка SSL - Принять Я просто установил ее на Игнорировать , тогда это работает.

enter image description here

...