首页 新闻 会员 周边 捐助

MAUI 上传文件解析

0
悬赏园豆:20 [待解决问题]

async Task UploadFiles(IReadOnlyList<IBrowserFile> file)
{
foreach (var item in file)
{
try
{
using (var stream = item.OpenReadStream(item.Size))
{
byte[] bytes = new byte[stream.Length];
await stream.ReadAsync(bytes, 0, (int)stream.Length);
files.Add(new FileInfoModel() { FileName = item.Name, ContentType = item.ContentType, Bytes = bytes });
}
}
catch (Exception ex)
{
throw;
}

        }
        StateHasChanged();
    }

{Microsoft.JSInterop.JSException: r.arrayBuffer is not a function
TypeError: r.arrayBuffer is not a function
at https://0.0.0.0/_framework/blazor.webview.js:1:34139
at Object.getJSDataStreamChunk (https://0.0.0.0/_framework/blazor.webview.js:1:34178)
at https://0.0.0.0/_framework/blazor.webview.js:1:3337
at new Promise (<anonymous>)
at beginInvokeJSFromDotNet (https://0.0.0.0/_framework/blazor.webview.js:1:3311)
at External.__callback (https://0.0.0.0/_framework/blazor.webview.js:1:42795)
at MessagePort.<anonymous> (<anonymous>:23:21)
at Microsoft.JSInterop.JSRuntime.<InvokeAsync>d__161[[System.Byte[], System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext() at Microsoft.AspNetCore.Components.PullFromJSDataStream.RequestDataFromJSAsync(Int32 numBytesToRead) at Microsoft.AspNetCore.Components.PullFromJSDataStream.ReadAsync(Memory1 buffer, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Components.Forms.BrowserFileStream.CopyFileDataIntoBuffer(Memory1 destination, CancellationToken cancellationToken) at Microsoft.AspNetCore.Components.Forms.BrowserFileStream.ReadAsync(Memory1 buffer, CancellationToken cancellationToken)

丿如何是好的主页 丿如何是好 | 菜鸟二级 | 园豆:213
提问于:2024-08-20 18:06
< >
分享
所有回答(2)
0

来自AI:

根据您提供的代码和错误信息,问题可能与上传文件时的JavaScript交互有关。
使用Blazor时,文件上传通常需要与JavaScript进行交互。错误信息中提到了一个名为"arrayBuffer"的函数找不到,这可能是由于JavaScript交互的问题引起的。
您可以尝试以下方法解决此问题:

  1. 确认JavaScript文件是否正确加载:检查您的Blazor应用程序中是否正确引用和加载了所需的JavaScript文件。确保对应的Javascript函数和方法可用且正确绑定。
  2. 更新Blazor版本:检查您正在使用的Blazor版本,看是否有已知的问题或错误修复。尝试升级到最新版本,以确保您使用的是最稳定和更新的版本。
  3. 检查代码逻辑:根据错误信息,它似乎是在读取文件数据时触发的。检查文件读取逻辑以确保它正确处理文件,并且没有任何错误或异常发生。
    如果上述方法都没有解决问题,请尝试在Blazor应用程序中搜索类似的问题或向Blazor社区提问,以获取更多专业建议和帮助。
Technologyforgood | 园豆:7541 (大侠五级) | 2024-08-21 07:43
0

stream.ReadAsync方法应该与异步流正确配合使用,建议改用MemoryStream来处理字节数组

using (var stream = item.OpenReadStream(maxAllowedSize: 10 * 1024 * 1024))
using (var memoryStream = new MemoryStream())
{
await stream.CopyToAsync(memoryStream);
files.Add(new FileInfoModel()
{
FileName = item.Name,
ContentType = item.ContentType,
Bytes = memoryStream.ToArray()
});
}

低低 | 园豆:118 (初学一级) | 2024-08-21 10:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册