C# BlazorInputFile-不支持同步读取

C# BlazorInputFile-不支持同步读取,c#,blazor,C#,Blazor,我正在尝试使用SteveSanderson的BlazorInputFile在Blazor WASM应用程序中上载文件。(服务器/客户端设置)。我按照他电脑上的说明安装了软件包 我的api以字节[]的形式接收文件,因此我将文件从流转换为字节[],然后发布到服务器中的api端点 private async Task Upload(InputFileChangeEventArgs e) { MemoryStream ms = new MemoryStream(); e.File.Ope

我正在尝试使用SteveSanderson的BlazorInputFile在Blazor WASM应用程序中上载文件。(服务器/客户端设置)。我按照他电脑上的说明安装了软件包

我的api以字节[]的形式接收文件,因此我将文件从流转换为字节[],然后发布到服务器中的api端点

private async Task Upload(InputFileChangeEventArgs e)
{
    MemoryStream ms = new MemoryStream();
    e.File.OpenReadStream().CopyTo(ms);
    var bytes = ms.ToArray();
    UploadFile file = new UploadFile
    {
        FileName = e.File.Name,
        FileContent = bytes,
        Size = e.File.Size,
        ContentType = e.File.ContentType
    };
        await Http.PostAsJsonAsync<UploadFile>("/api/uploadfile", file);
        await OnInitializedAsync();
}
专用异步任务上载(InputFileChangeEventArgs e)
{
MemoryStream ms=新的MemoryStream();
e、 文件.OpenReadStream().CopyTo(ms);
var bytes=ms.ToArray();
UploadFile文件=新上传文件
{
FileName=e.File.Name,
FileContent=bytes,
Size=e.File.Size,
ContentType=e.File.ContentType
};
等待Http.PostAsJsonAsync(“/api/uploadfile”,file);
等待OnInitializedAsync();
}
不幸的是,我一直从BlazorInputFile收到一个错误/异常,它说“不支持同步读取”


我尝试搜索错误,并进行了各种修复(浏览器adblocker可能会被阻止等),但没有一个修复了问题。

问题似乎在于您使用的是Stream.CopyTo方法的同步版本,这就是您收到关于不支持同步读取的错误消息的原因。 我认为将这一行改为:

await e.File.OpenReadStream().CopyToAsync(ms);

将很可能解决您的问题。

问题似乎是您正在使用Stream.CopyTo方法的同步版本,这就是您收到有关不支持同步读取的错误消息的原因。 我认为将这一行改为:

await e.File.OpenReadStream().CopyToAsync(ms);

很可能会解决你的问题。

达迪培根的答案看起来是正确的,干得好。我只是想指出Blazor现在有了一个原生的InputFile组件,而不需要手动安装SteveSanderson的原型

你可以在DotNet中找到更多信息


我建议将您的解决方案更改为此版本,因为它很可能是唯一获得更新的解决方案。唯一需要注意的是,您需要使用Asp.Net Core 5.0或更高版本才能使用它。

Daddyback的答案看起来是正确的,干得好。我只是想指出Blazor现在有了一个原生的InputFile组件,而不需要手动安装SteveSanderson的原型

你可以在DotNet中找到更多信息


我建议将您的解决方案更改为此版本,因为它很可能是唯一获得更新的解决方案。唯一需要注意的是,您需要使用Asp.Net Core 5.0或更高版本才能使用它。

哇,太快了。我绞尽脑汁想找出问题,已经有几个小时了。非常感谢!(答案很有效,我的上传效果也很好)哇,太快了。我绞尽脑汁想找出问题,已经有几个小时了。非常感谢!(回答有效,我的上传现在运行良好)谢谢,我没有意识到这一点。我目前只使用NET3.1,但似乎值得升级到较新版本以利用此功能。您必须升级。必须Blazor是如此的新,每一次升级都带来了巨大的改进。对Albert的好答案没有冒犯,但问题不是输入控件的选择。这是流媒体方法。达迪培根的答案应该标记为答案。谢谢,我没有意识到这一点。我目前只使用NET3.1,但似乎值得升级到较新版本以利用此功能。您必须升级。必须Blazor是如此的新,每一次升级都带来了巨大的改进。对Albert的好答案没有冒犯,但问题不是输入控件的选择。这是流媒体方法。达迪培根的答案应该标记为答案。