MultipartReader: Unexpected end of Stream, the content may have already been read by another component
Всем привет, столкнулся с такой проблемой что при чтении данных с помощью MultipartReader всегда получаю исключение и программа падает, вот с такой ошибкой:
Unexpected end of Stream, the content may have already been read by another component.
Помогите пожалуйста найти ошибку.
Вот как я отправляю, основа была взята из документации майкрософта:
using (HttpClient client = new HttpClient())
{
foreach (string file in files)
{
string mainServerUrl = $"http://localhost:8080/api/send/{sessionId}";
Console.WriteLine("mainServerUrl = " + mainServerUrl);
long fileSize = new FileInfo(file).Length;
Console.WriteLine($"Размер файла {Path.GetFileName(file)}: {fileSize} байт");
// Cоздаем MultipartFormDataContent
using var multipartFormContent = new MultipartFormDataContent();
// Загружаем отправляемый файл
using var fileStream = File.OpenRead(file); // Открываем файл для чтения
var fileStreamContent = new StreamContent(fileStream);
// Устанавливаем заголовок Content-Type
fileStreamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
// Добавляем загруженный файл в MultipartFormDataContent
multipartFormContent.Add(fileStreamContent, name: "binary", fileName: Path.GetFileName(file));
long multipartSize = await GetMultipartFormDataContentLengthAsync(multipartFormContent);
Console.WriteLine($"Размер содержимого MultipartFormDataContent: {multipartSize} байт");
HttpResponseMessage response = await client.PostAsync(mainServerUrl, multipartFormContent);
if (response.IsSuccessStatusCode)
{
Console.WriteLine($"Файл {Path.GetFileName(file)} успешно отправлен на основной сервер");
}
else
{
Console.WriteLine($"Не удалось отправить файл {Path.GetFileName(file)} на основной сервер. Код состояния: {response.StatusCode}");
}
}
}
Принимаю так:
Console.WriteLine("Заголовки запроса:");
foreach (var key in request.Headers.AllKeys)
{
Console.WriteLine($"{key}: {request.Headers[key]}");
}
try
{
if (request.HasEntityBody)
{
Console.WriteLine("Request имеет тело сущности.");
var boundary = GetBoundary_1(request.ContentType);
if (boundary == null)
{
Console.WriteLine("Boundary is null.");
throw new InvalidOperationException("Boundary is null.");
}
Console.WriteLine("Boundary: " + boundary);
using (Stream requestStream = request.InputStream)
{
MultipartReader reader = new MultipartReader(boundary, requestStream);
MultipartSection section = null;
try
{
if (!requestStream.CanRead)
{
Console.WriteLine("InputStream не может быть прочитан.");
throw new InvalidOperationException("InputStream не может быть прочитан.");
}
Console.WriteLine("Чтение следующего раздела.");
section = await reader.ReadNextSectionAsync();
Console.WriteLine("Первый раздел прочитан.");
while (section != null)
{
Console.WriteLine("Обработка раздела.");
string contentDisposition = section.Headers["Content-Disposition"];
string fileName = GetFileName(contentDisposition);
Console.WriteLine("Файл: " + fileName);
string filePath = Path.Combine("data", sessionId, fileName);
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
await section.Body.CopyToAsync(fileStream);
}
Console.WriteLine($"Файл сохранен: {filePath}");
section = await reader.ReadNextSectionAsync();
Console.WriteLine("Следующий раздел прочитан.");
}
}
catch (Exception ex)
{
Console.WriteLine("Ошибка при чтении следующего раздела: " + ex.Message);
Console.WriteLine("Стек исключения: " + ex.StackTrace);
if (ex.InnerException != null)
{
Console.WriteLine("Внутреннее исключение: " + ex.InnerException.Message);
Console.WriteLine("Стек внутреннего исключения: " + ex.InnerException.StackTrace);
}
throw;
}
}
}
else
{
Console.WriteLine("Запрос не имеет тела сущности.");
}
}
catch (Exception e)
{
Console.WriteLine("Ошибка: " + e.Message);
Console.WriteLine("Стек исключения: " + e.StackTrace);
}