移动端使用blaozr;上传文件到后端出现的错误。
事件管理器信息:
Category: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware
EventId: 1
SpanId: a9e0b1fbb07091e3
TraceId: 9149f03309e437b22613eb4db1d35aa1
ParentId: 0000000000000000
RequestId: 400000b9-0001-c800-b63f-84710c7967bb
RequestPath: /upload/multiple/-788015685
An unhandled exception has occurred while executing the request.
Exception:
System.UnauthorizedAccessException: Access to the path 'C:\Windows\TEMP\ASPNETCORE_4d3890a6-5ebc-4b23-89c6-a1955595cd52.tmp' is denied.
at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64
这是一个bug,出现的实际是:
我是用Blazor编写了一个“Tmp"网站,可用于分享代码,文件等。但是,一个异常很诡异,我在电脑端不会发生,就是上传一个图片格式的文件到asp.net core的后端。无论改不改文件后缀甚至文件内容以破坏结构,都会发生。
我找到了事件管理器查看了错误事件,并且进行查看,信息如上。
我去问了chatgpt api,给我的回复是:
对于ASP.NET Core Blazor应用程序部署在IIS上,手机上传文件时出现`System.UnauthorizedAccessException`异常,指示访问路径'C:\Windows\TEMP\ASPNETCORE_4d3890a6-5ebc-4b23-89c6-a1955595cd52.tmp'被拒绝的问题。
这个问题通常是由于应用程序池的身份在IIS中没有足够的权限来访问临时文件夹造成的。应用程序池的身份是IIS用来运行ASP.NET Core应用程序的用户身份。
你可以尝试以下方法来解决这个问题:
1. 确保应用程序池的身份具有足够的权限:在IIS管理器中,找到你的应用程序池,右键点击并选择"高级设置"。在"进程模型"部分,确保"标识"设置为一个具有足够权限的用户账户,例如"NetworkService"或自定义的账户。如果使用自定义账户,请确保该账户具有足够的权限来访问临时文件夹。
2. 更新临时文件夹的权限:在Windows操作系统上,右键点击临时文件夹(例如'C:\Windows\TEMP'),选择"属性",然后进入"安全"选项卡。确保应用程序池的身份具有读写权限。
3. 更改临时文件夹的位置:如果你无法更改临时文件夹的权限,可以尝试更改ASP.NET Core应用程序使用的临时文件夹位置。在`Startup.cs`文件的`ConfigureServices`方法中,使用`services.Configure<TempFileOptions>(options => options.TempFolderPath = "新的临时文件夹路径")`来指定新的临时文件夹路径。
请注意,如果你更改了临时文件夹的位置,请确保新的临时文件夹路径具有足够的权限供应用程序池的身份访问和操作。
这些方法应该能够解决你遇到的问题。如果问题仍然存在,请确保你的手机浏览器和服务器之间的通信正常,并且在服务器端正确处理文件上传的逻辑。
如果还有其他问题,请随时提问。
我按照相应的操作,最后完成了这个bug的修复。
我使用的是前两步,具体是一步就行还是必须两步就不另行测试了。
1 => 应用程序池 => 高级设置
进程模型=>标识
修改为LocalSystem
2 => 文件资源管理器=>C:\Windows=>
Temp=>属性=> 安全=> All application packages
编辑=>全部允许
然后,工作良好。