我使用Windows操作系统和Visual Studio开发Web应用程序。我使用Ubuntu Server 22.04(LTS)作为生产操作系统。我可以在Ubuntu 22.04上运行我的应用程序,它工作正常,但客户端可以上传文件的应用程序部分不工作,并导致错误500。不幸的是,我在Windows上开发我的应用程序,我无法调试它。经过大量的试验,我发现部分原因错误500.以下是我用于上传文件的代码部分:
[HttpPost]
[Authorize]
public async Task<IActionResult> UploadNewPmFile(IList<IFormFile> uploadedFile)
{
.
.
.
var fileName = Path.GetFileName(file.FileName);
var fileExtension = Path.GetExtension(fileName);
var newFileName = string.Concat(userId, fileExtension);
var path = Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\Data\Temp", newFileName);
using (var stream = new FileStream(path, FileMode.Create)) //***Error is here***
{
await file.CopyToAsync(stream);
}
.
.
.
}
字符串
正如你所看到的,using
部分在Ubuntu上导致错误500,但它在Windows上工作正常。我在Windows和Ubuntu上都使用.NET 8.0运行时。我在这个网站上搜索了很多问题,但我找不到任何与此相关的内容。我如何解决这个问题?
**更新:**请注意,已发布的应用程序在Windows上运行正常,没有错误,但文件上传部分在Ubuntu上不起作用。
1条答案
按热度按时间dwthyt8l1#
Linux/Unix使用
/
作为目录路径字符,而Windows使用\
。有关详细信息,请参阅Path.DirectorySeparatorChar。OP中的代码包含:
字符串
可以删除
\
并将代码重写为:型
这将允许Path.Combine为代码运行的操作系统使用正确的目录分隔符。
有关远程调试的信息,请参见Debug .NET Core on Linux using SSH by attaching to a process。