c# - 使用 Blazor 和 Aspnet Webapi 跟踪 HttpClient.PostAsync 进度
问题描述
我目前正在使用 Blazor 和 Asp.Net WebApi 控制器来执行一些文件上传/下载。我在 Blazor 客户端中调用了一个 UploadFiles(),如下所示:
public async Task<bool> UploadFiles(Action<int> callback, IReadOnlyList<IBrowserFile> files, string subdir = "")
{
if (files != null)
{
var content = new MultipartFormDataContent();
foreach (var file in files)
{
var fileContent = new StreamContent(file.OpenReadStream(_allowedMaxFileSize));
content.Add(fileContent, "\"files\"", file.Name);
hasItemsForUpload = true;
}
if (content != null)
{
var uri = $@"api/mycontroller/upload?subdir=" + subdir;
var result = await _http.PostAsync(uri, content);
if (result.IsSuccessStatusCode)
{
return true;
}
}
}
return false;
}
有没有办法让我轻松跟踪 httpclient.postasync() % 进度,我可以在回调中将 % 作为 int 传递?注意_http
这里是通过注册为startup.cs的AddScope()的依赖注入注入的
我见过使用自定义 http 内容的复杂示例,但我似乎无法理解它...... :(
请帮忙..
解决方案
文件组件.razor
<div> Progress: @current </div>
@code
{
int current = 0;
void UpdateProgress()
{
current++;
StateHasChanged();
}
void ResetBatch(){ current=0; }
public async Task<bool> UploadFiles(Action<int> callback, IReadOnlyList<IBrowserFile> files, string subdir = "")
{
ResetBatch();
if (files != null)
{
var content = new MultipartFormDataContent();
foreach (var file in files)
{
var fileContent = new StreamContent(file.OpenReadStream(_allowedMaxFileSize));
content.Add(fileContent, "\"files\"", file.Name);
hasItemsForUpload = true;
if (content != null)
{
var uri = $@"api/mycontroller/upload?subdir=" + subdir;
var result = await _http.PostAsync(uri, content);
}
UpdateProgress();
}
}
ResetBatch();
return true;
}
}
请注意,您可以创建一个完整的上传批处理类,而不是“当前”,其中包含有关要更新的总文件、文件名、当前文件名、每次上传的状态等信息。
推荐阅读
- android - Android:想要在 2 个变量更改时从 roomDB 获取数据
- c - 当函数调用返回时,压入堆栈的参数会发生什么?
- sql-server - 如何在存储过程中使用@@RowCount 对另一个表中的行计算百分比?
- css - 按条件将样式添加到 Angular 选择器的外部 div
- c++ - CGAL 示例的编译错误
- asp.net - Plesk 发布 asp.net mvc 文件或目录未找到错误
- css - 仅使用 CSS 创建形状
- android - 代码中没有错误。但安装后,我的应用程序崩溃并纠正 logcat “错误试图写入空数组”
- javascript - 将 gmaps infowindow 值传递给表单
- angular - Angular MATABLE 不显示数据