C# Сохранение нескольких файлов на сервере в потоковой передаче
Подскажите как я могу сделать чтобы в рамках одного запроса через httpclient
я мог передать составной запрос из нескольких файлов в потоке. Сейчас я могу передать в потоке один файл и сохранить его на сервере.
Код для отправки файла со стороны клиента
public async Task SendFile(string filePath, string url)
{
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (HttpClient client = new HttpClient())
{
client.Timeout = TimeSpan.FromMinutes(10);
// Создаем объект MultipartFormDataContent для передачи файла
using (MultipartFormDataContent content = new MultipartFormDataContent())
{
// Создаем объект StreamContent для передачи содержимого файла
using (StreamContent fileContent = new StreamContent(fileStream))
{
client.DefaultRequestHeaders.Add("Token", "1234");
content.Add(fileContent, "file", System.IO.Path.GetFileName(filePath));
// Отправляем запрос на сервер с помощью метода HTTP POST
HttpResponseMessage response = await client.PostAsync(url, content);
// Получаем ответ от сервера и проверяем его статусный код
if (response.IsSuccessStatusCode)
{
Console.WriteLine("Файл успешно передан.");
}
else
{
Console.WriteLine("Произошла ошибка при передаче файла.");
}
}
}
}
}
}
Код для сохранения файла с потока
[HttpPost("/uploadfile")]
//[DisableRequestSizeLimit]
[RequestSizeLimit((long)1e+10)]
[RequestFormLimits(MultipartBodyLengthLimit = (long)1e+10)]
public async Task<IActionResult> UploadFile()
{
if (!Request.HasFormContentType || !MediaTypeHeaderValue.TryParse(Request.ContentType, out var mediaTypeHeader) || string.IsNullOrEmpty(mediaTypeHeader.MediaType))
return new UnsupportedMediaTypeResult();
Stopwatch stopwatch = Stopwatch.StartNew();
using var fileStream = new FileStream("test.rar", FileMode.Create);
var buffer = new byte[1024 * 50];
int bytesRead;
while ((bytesRead = await Request.Body.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
await fileStream.WriteAsync(buffer, 0, bytesRead);
}
stopwatch.Stop();
Console.WriteLine($"Время работы сохранения файла: {stopwatch.ElapsedMilliseconds}");
return Ok();
}
Источник: Stack Overflow на русском