使用 ASP.NET 核心网站将文件夹上传到 Fileshare

Upload Folders to Fileshare with ASP.NET Core Website

我希望我的上传文件夹驻留在文件共享上。

我想要这个的原因:冗余前端。

所以不要保存到:

C:\inetpub\wwwroot\wwwroot\Uploads

上传应保存到:

\fileshare01\MyWebsite\Uploads

我知道 VirtualDirectories 存在。这适用于从文件共享中读取,但写入上传目录仍会写入本地驱动器。 因此,使用 VirtualDirectories,我可以访问 http://localhost/Uploads/myfile.png,它实际上在文件共享上,但新文件没有写入那里!

这里(简化)了我如何保存文件:

IFormFileCollection files = Request.Form.Files;
var file = files.First();
using (var stream = new FileStream(@"Uploads\myfile.png", FileMode.Create))
{
    await file.CopyToAsync(stream);
}

当我尝试将新网络路径保存为绝对路径时,我似乎需要更高的权限并以 500.30 错误结束。我猜是因为应用程序池用户的权限太少,我认为这是一件好事。

我的问题:

作为良好实践,这个问题是如何解决的?在配置 VirtualDirectory(包括写入)时,不应该一切都自动工作吗?

解决了。由于 appconfig.json 中的错误,我刚刚收到 500.30 错误。我没有在基本路径中转义反斜杠。

我发现这个 blog post

There is no need to add a „virtual directory“ in IIS, this stuff is deprecated

并解释这是通过 Startup.cs Configure() 方法完成的方式:

app.UseFileServer(new FileServerOptions
{
    FileProvider = new PhysicalFileProvider(@"\server\path"),
    RequestPath = new PathString("/MyPath"),
    EnableDirectoryBrowsing = false
});

另一个ASP.NET核心的配置之谜解决了:)