【问题标题】:Uploading and saving a file to IIS virtual directory outside the root folder将文件上传并保存到根文件夹外的 IIS 虚拟目录
【发布时间】:2021-11-03 04:08:33
【问题描述】:

基于微软的网站以及这个论坛,普遍的共识似乎是将网站上传的用户文件保存在 wwwroot 文件夹 (C:\inetpub\wwwroot) 之外,甚至更好地保存在系统驱动器之外。我在 IIS 中为我​​的文件上传设置了一个虚拟目录(C:\inetpub\files),该目录位于 wwwroot 之外,但仍在 C 驱动器上(我们只有一个驱动器,我无法对其进行分区以创建另一个驱动器)。所以希望这在这方面仍然被认为是安全的!然而,我的问题是我使用以下代码将目录获取到我的托管环境:

                    var filePath = Path.Combine(env.WebRootPath, document.DOCUMENT_LOCATION);
                    var fileName = document.FILENAME_AFTER_UPLOAD;
                    var fullPath = Path.Combine(filePath, fileName);

我不确定我应该使用什么文件路径来保存到虚拟目录。虚拟目录的别名是“files”,所以它的虚拟路径是/files,所以我应该使用 env.WebRootPath +“/files”还是有其他方法可以访问虚拟目录/路径?后台文档是来自 SQL 查询的模型对象,它返回我要保存到的文件路径和我们在 SQL 服务器中创建的文件名。

【问题讨论】:

  • 你的意思是把文件上传到指定的路径,比如C盘还是D盘?
  • 我想使用 ihostenviroment 命名空间中的 env.webrootpath 来保持我的代码更加动态。但是,我将文件上传文件夹存储在 env.webrootpath 的父目录之外,因为它位于 wwwroot 之外

标签: asp.net-core iis asp.net-core-webapi iis-8


【解决方案1】:

所以,你想在 env.webrootpath 的父目录中上传一个文件之外的文件意味着 wwwroot 文件夹。所以试试下面的代码:-

var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/img", document.Document.FileName);

以上,env.webrootpath 无需使用,因为您希望路径更加动态。

或者如果你想上传到 C 盘而不是 wwwroot。

string SavePath = Path.Combine(Directory.GetCurrentDirectory(), (@"C:\", model.FormFile.FileName);

【讨论】:

  • asp.net 核心项目带有一个 wwwroot 文件夹,其中包含 js、css 和 img 文件夹等。当您在 IIS 中启动一个新站点时,wwwroot 文件夹是公共文件夹。所以奇怪的是我在 wwwroot 文件夹中有一个 wwwroot 文件夹。我是否应该调整我的 IIS 站点,使公用文件夹是子 wwwroot?
  • @Bradyboyy88 如果你有两个 wwwroot 文件夹,你可以删除一个。或者你可以调整它。主要是你的路径是否正确。
  • 很奇怪,Visual Studio 中的所有 asp.net 核心应用程序模板都包含 wwwroot 文件夹,而 wwwroot 文件夹不应该包含所有附加文件,例如 startup.cs 等?我决定改变我的 IIS 站点的路径,使其带有 css、js 和 img 库的子 wwwroot 并且该站点不会加载,这使我认为 VS 模板中包含的 wwwroot 文件夹不应称为 wwwroot。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多