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

时间:2019-05-05 21:41:40

标签: asp.net-core virtual-directory

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

为什么要这样:冗余前端。

所以不要保存到:

  

C:\ inetpub \ wwwroot \ wwwroot \ Uploads

上传内容应保存到:

  

\\ fileshare01 \ MyWebsite \ Uploads

我知道VirtualDirectories存在。这适用于从文件共享读取,但是写入Uploads目录仍会写入lokal驱动器。 因此,使用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(包括编写)时,不是所有事情都能自动完成吗?

1 个答案:

答案 0 :(得分:0)

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

我发现这句话blog post

  

无需在IIS中添加“虚拟目录”,这是   不推荐使用

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

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

ASP.NET Core的另一个配置奥秘得以解决:)