gpt4 book ai didi

c# - Blazor 服务器文件上传静默崩溃服务器

转载 作者:行者123 更新时间:2023-12-05 09:02:37 24 4
gpt4 key购买 nike

我正在我的 Blazor 服务器应用程序上测试图像上传。为此,我的 .razor 组件如下所示:

@page "/uploadtest"

<h1>Upload Example</h1>
<AuthorizeView>
<Authorized>
<p>A simple example with a model, which can upload images</p>
<label>
Load Images:
<InputFile OnChange="@UploadImages" multiple accept=".jpg,.jpeg,.png" />
</label>

</Authorized>
<NotAuthorized>
<p>To use this application, please <a href="Identity/Account/Login">log in</a> or <a href="Identity/Account/Register">register</a> a new account! </p>
</NotAuthorized>
</AuthorizeView>

我将代码隐藏放在一个单独的 .razor.cs 文件中,该类如下所示:

public partial class UploadExample: ComponentBase
{
#region Protected Properties
[Inject]
protected AuthenticationStateProvider AuthenticationStateProvider { get; private set; }

[Inject]
protected IWebHostEnvironment WebHostEnvironment { get; private set; }
#endregion

#region Public Methods
/// <summary>
/// File upload
/// Only images of type .jpg and png are allowed here.
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
protected async Task UploadImages(InputFileChangeEventArgs ifc)
{
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
var user = authState.User;

if (user.Identity.IsAuthenticated)
{
try
{
string userId = user.FindFirst(c => c.Type.Contains("nameidentifier"))?.Value;
string currentTime = DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss");
string path = Path.Combine(WebHostEnvironment.WebRootPath, $@"UserData/{userId}/UploadTest/{currentTime}");
Directory.CreateDirectory(path);
var files = ifc.GetMultipleFiles();
foreach (var file in files)
{
var filePath = Path.Combine(path, file.Name);
await using FileStream fs = new(filePath, FileMode.Create);
await file.OpenReadStream().CopyToAsync(fs);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
#endregion
}

这是我的问题:

  • 由于某种原因,在执行 UploadImages() 函数后,应用程序无声地崩溃了。我在控制台输出中找不到任何有用的东西,也没有抛出任何异常,它只是以代码 -1 停止。但是,文件已成功上传到预期的文件夹。此外,崩溃似乎与函数无关。
  • 代码当前将文件存储在 wwwroot 文件夹中,我确信这是个坏主意。我已经有了一个数据访问层,它是一个单独的类库,可以处理所有数据库内容。基本上,我只想要存储在数据库中的图像的路径,但数据访问库仍应处理图像的存储。将 IBrowserFile 对象提供给单独的类库是否很常见?如果不是,数据将如何发送到数据访问层?

编辑在我的浏览器的 Dev-Options 中,出现以下错误:

Error: Connection disconnected with error 'Error: WebSocket closed with status code: 1006 ().'.

只要我选择要上传的任何文件。我测试了不同的东西(有/没有授权,调用/不调用 UploadImages() 函数等...)

最佳答案

我偶然发现了这个问题:Blazor Server inputfile Crashes with certain Chromium Based Browsers
这听起来很像你正在经历的,对吧?

为进一步证明该理论,请下载以下代码:https://github.com/mu88/StackOverflow_BlazorServerFileUpload
这基本上是您的代码的简化副本,可在我的 Chrome 和 Firefox 机器上运行。如果您可以在 Chrome 和 Firefox 的计算机上运行该代码,但不能在 Brave 中运行,我想我们可以确定我们找到了罪魁祸首。

关于c# - Blazor 服务器文件上传静默崩溃服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71141070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com