ASP.NET CORE 2 System.Net.Sockets.SocketException: при загрузке файлов - PullRequest
0 голосов
/ 20 июня 2019

Я всегда получаю следующее сообщение об ошибке при попытке загрузить файл через IIS / Server, он работает локально, но на сервере всегда возникает эта проблема.

Кто-нибудь знает, что может бытьпроблема?

Сообщение об ошибке:

Ошибка вызывающего обработчика события: Microsoft.AspNetCore.Connections.ConnectionResetException: существующее соединение было принудительно закрыто удаленным хостом ---> System.Net.Sockets.SocketException: существующее соединение было принудительно закрыто удаленным хостом в Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal.SocketAwaitable.GetResult () в Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal.SocketConnection.ProcessReceives () в Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal.SocketConnection.DoReceive () --- Конец внутренней трассировки стека исключений --- в System.IO.Pipelines.PipeCompletion.ThrowLatchedException () вSystem.IO.Pipelines.Pipe.GetReadResult (ReadResult & result) в System.IO.Pipelines.Pipe.GetReadAsyncResult () в System.IO.Pipelines.Pipe.DefaultPipeReader.GetResult (токен Int16)
в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1MessageBody.PumpAsync в (.Pipelines.PipeCompletion.ThrowLatchedException () в System.IO.Pipelines.Pipe.GetReadResult (ReadResult & result) в System.IO.Pipelines.Pipe.ReadAsync (токен CancellationToken) в System.IO.Pipelines.Pipe.DefaultPipeReader.ReAsAsinAgncancellationToken) в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.MessageBody.ReadAsync (буфер 1 buffer, CancellationToken cancellationToken) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpRequestStream.ReadAsyncInternal(Memory 1, CancellationToken cancellationToken) в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.StreamRead (Буфер [], смещение Int32, число Int32) в Microsoft.AspNetCore.WebUtilities.FileBufferingReadStream.Read (буфер Byte [], смещение Int32, число Int32) в System.IO.StreamReader.ReadBuffer () в System.IO.StreamReader.ReadToEnd () в Sentry.Extensibility.DefaultRequestPayloadExtractor.DoExtractPayLoad (IHttpRequest request) в Sentry.Extensibility.BaseRequestPayloadExtractor.ExtractPayload (запрос IHttpRequest) в Sentry.Extensibility.RequestBodyExtractionDispatcher.ExtractPayload (запрос IHttpRequest) в Sentry.AspNet.oresport.Sext.ScopeExtensions.Populate (область действия Scope, контекст HttpContext, параметры SentryAspNetCoreOptions) в Sentry.AspNetCore.SentryMiddleware.PopulateScope (контекст HttpContext, область действия Scope) в Sentry.Scope.Evaluate ()

Beind2*

try
{
    string folder = "FileLocation/";
    string folderpath = "";

    if (model.Filess != null)
    {
        string fileExtension = Path.GetExtension(model.Filess.FileName);
        fileExtension = fileExtension.ToLower();

        long fileSize = model.Filess.Length;

        if (fileSize <= 10485760)
        {
            folderpath = Path.Combine(__hostingEnvironment.WebRootPath, "Uploads", folder);
            if (!Directory.Exists(folderpath))
            {
                Directory.CreateDirectory(folderpath);
            }

            var parsedContentDisposition =
                ContentDispositionHeaderValue.Parse(model.Filess.ContentDisposition);

            var filename = Path.Combine(__hostingEnvironment.WebRootPath,
                "Uploads", folder, parsedContentDisposition.FileName.Trim('"'));

            using (var stream = System.IO.File.OpenWrite(filename))
            {
                await model.Filess.CopyToAsync(stream);
            }
        }
    };
}
catch (Exception ex)
{

}

1 Ответ

0 голосов
/ 25 июня 2019

Согласно этой проблеме github , MSFT исправила эту проблему на ядре asp.net 2.1.Я полагаю, вы могли бы попытаться обновить версию вашего ядра asp.net (до 2.2) на вашем сервере.

Я также создал тестовую демонстрацию на моей стороне и опубликовал на сервере IIS, она работает хорошо.

Подробнее о моей тестовой демонстрации вы можете найти в следующих кодах:

MVC View:

@model  UploadViewModel
@{
    ViewData["Title"] = "Index";
}

<h1>Index</h1>


<form asp-action="CreateAsync" enctype="multipart/form-data">
    <input asp-for="Id" /> 
    <input asp-for="Filess" />
    <input type="submit" />
</form>

Контроллер:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using MVCCoreUpload.Models;

namespace MVCCoreUpload.Controllers
{
    public class FileUploadController : Controller
    {

        private readonly IHostingEnvironment _hostingEnvironment;

        public FileUploadController(IHostingEnvironment hostingEnvironment)
        {
            _hostingEnvironment = hostingEnvironment;
        }

        public IActionResult Index()
        {
            return View(new UploadViewModel());
        }

        public async Task<IActionResult> CreateAsync(UploadViewModel model)
        {
            try
            {
                string folder = "FileLocation/";
                string folderpath = "";

                if (model.Filess != null)
                {
                    string fileExtension = Path.GetExtension(model.Filess.FileName);
                    fileExtension = fileExtension.ToLower();

                    long fileSize = model.Filess.Length;

                    if (fileSize <= 10485760)
                    {
                        folderpath = Path.Combine(_hostingEnvironment.WebRootPath, "Uploads", folder);
                        if (!Directory.Exists(folderpath))
                        {
                            Directory.CreateDirectory(folderpath);
                        }

                        var parsedContentDisposition =
                            ContentDispositionHeaderValue.Parse(model.Filess.ContentDisposition);

                        var filename = Path.Combine(_hostingEnvironment.WebRootPath,
                            "Uploads", folder, parsedContentDisposition.FileName.Trim('"'));

                        using (var stream = System.IO.File.OpenWrite(filename))
                        {
                            await model.Filess.CopyToAsync(stream);
                        }
                    }
                };
            }
            catch (Exception ex)
            {

            }
            return View("index");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...