使用 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核心的配置之谜解决了:)
我希望我的上传文件夹驻留在文件共享上。
我想要这个的原因:冗余前端。
所以不要保存到:
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核心的配置之谜解决了:)