我正努力在ASP Core 2.2应用程序中提供上传和下载大文件(最大50GB)的功能。目前,出于测试目的,我将文件保存在本地存储中,但将来,我会将其移至某个云存储提供商。
文件将由其他用Java编写的服务器发送,更具体地说,它将是Jenkins插件,该插件使用This library将项目构建发送到我的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");
}
我现在正在使用此代码上传文件,但对于大于300mb的较大文件,开始上传文件需要一段时间。
我尝试查找有关如何实现此目标的许多文章,例如: Official docs 要么 Stack
但是,由于上载需要很长时间,因此所有解决方案似乎都不适合我,而且我还注意到,对于〜200MB(目前我可以上载的最大文件)的文件,上载的数据越多,我的PC速度就越慢。 / p>
如果我遵循正确的道路,或者我应该改变方法,我需要一些建议。谢谢。