以下是一个示例代码,演示了如何在ASP.NET Core中将文件上传的进度报告返回到前端。
首先,创建一个名为"UploadProgress.cs"的类,用于存储文件上传的进度信息。
public class UploadProgress
{
public long BytesRead { get; set; }
public long TotalBytes { get; set; }
public bool IsFinished { get; set; }
public decimal Percentage => TotalBytes <= 0 ? 0 : (decimal)BytesRead / TotalBytes * 100;
}
然后,在Controller中创建一个"UploadController.cs",包含文件上传的Action以及进度报告的Action。
[Route("api/[controller]")]
[ApiController]
public class UploadController : ControllerBase
{
private readonly IWebHostEnvironment _environment;
public UploadController(IWebHostEnvironment environment)
{
_environment = environment;
}
[HttpPost("upload")]
public async Task Upload(IFormFile file)
{
if (file == null || file.Length == 0)
{
return BadRequest("No file uploaded.");
}
// 文件上传逻辑
var filePath = Path.Combine(_environment.WebRootPath, "uploads", file.FileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
return Ok();
}
[HttpGet("progress")]
public IActionResult Progress()
{
// 获取上传进度
var progress = new UploadProgress
{
BytesRead = // 获取已读取的字节数,
TotalBytes = // 获取总字节数,
IsFinished = // 判断上传是否完成
};
return Ok(progress);
}
}
最后,在Startup.cs文件中注册上传控制器,并启用Multipart请求。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.Configure(options =>
{
options.AllowSynchronousIO = true;
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
通过上述代码,你可以在前端调用"/api/upload/upload"执行文件上传,然后通过"/api/upload/progress"获取文件上传的进度报告。
下一篇:Asp.net核心文件下载损坏