Я изо всех сил пытаюсь обеспечить возможность в моем приложении ASP Core 2.2 загружать и скачивать большие файлы, до 50 ГБ. В настоящее время для целей тестирования я сохраняю файлы в локальном хранилище, но в будущем перенесу их в какой-либо поставщик облачного хранилища.
Файлы будут отправлены другим сервером, написанным на Java, более конкретно, это будет плагин Jenkins, который отправляет сборки проекта на мой сервер ASP Core с использованием Эта библиотека .
В настоящее время я использую классический класс Controller с HttpPost для загрузки файлов, но мне кажется, что это не лучшее решение для моих целей, поскольку я не буду использовать какую-либо веб-страницу для вложения файлов из клиента.
[HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = 50000000000)]
[RequestSizeLimit(50000000000)]
[AllowAnonymous]
[Route("[controller]/upload")]
public async Task<IActionResult> Upload()
{
var files = Request.Form.Files;
SetProgress(HttpContext.Session, 0);
long totalBytes = files.Sum(f => f.Length);
if (!IsMultipartContentType(HttpContext.Request.ContentType))
return StatusCode(415);
foreach (IFormFile file in files)
{
ContentDispositionHeaderValue contentDispositionHeaderValue =
ContentDispositionHeaderValue.Parse(file.ContentDisposition);
string filename = contentDispositionHeaderValue.FileName.Trim().ToString();
byte[] buffer = new byte[16 * 1024];
using (FileStream output = System.IO.File.Create(GetPathAndFilename(filename)))
{
using (Stream input = file.OpenReadStream())
{
long totalReadBytes = 0;
int readBytes;
while ((readBytes = input.Read(buffer, 0, buffer.Length)) > 0)
{
await output.WriteAsync(buffer, 0, readBytes);
totalReadBytes += readBytes;
int progress = (int)((float)totalReadBytes / (float)totalBytes * 100.0);
SetProgress(HttpContext.Session, progress);
Log($"SetProgress: {progress}", @"\LogSet.txt");
await Task.Delay(100);
}
}
}
}
return Content("success");
}
Я сейчас использую этот код для загрузки файлов, но для более крупных файлов> 300 МБ требуется несколько лет, чтобы начать загрузку.
Я пытался найти много статей о том, как этого добиться, например:
Официальные документы
или же
Stack
Но ни одно из решений, похоже, не работает для меня, так как загрузка занимает много времени, и я также заметил, что для файлов ~ 200 МБ (самый большой файл, который я мог загрузить на данный момент), чем больше данных загружено, тем больше мой компьютер работает медленнее.
Мне нужен совет, если я иду по правильному пути или, возможно, мне следует изменить свой подход. Спасибо.