我如何将文件保存在IIS文件夹内的应用程序文件夹外的asp.net

本文关键字:文件夹 应用程序 net asp IIS 文件 存在 保存 | 更新日期: 2023-09-27 18:12:03

在我的web应用程序中,我有一些文件是在应用程序中保存的,它创建了一个文件夹来保存文件,但我需要将这些文件保存在应用程序之外,并在IIS中。我该怎么做呢?在应用程序文件夹中,我们使用下面的代码

Server.MapPath(Path) 

For Saving in IIS如何写?

Thank you

我如何将文件保存在IIS文件夹内的应用程序文件夹外的asp.net

您需要创建一个指向外部文件夹的虚拟目录。转到IIS右键单击您的网站。单击菜单中的"添加虚拟目录"。为目录指定别名,选择所需的文件夹,就完成了。它将把这个外部文件夹视为内部文件夹,并以相同的方式工作。如何:在IIS 7.0中创建和配置虚拟目录

免责声明:但是您必须在托管到iis后这样做,即发布。当在开发环境中使用visual studio时,例如调试,它将仅存储在内部目录

中。

编辑:用于创建虚拟目录这是代码。我还没有检验过它的有效性。

static void CreateVDir(string metabasePath, string vDirName, string physicalPath)
{
  //  metabasePath is of the form "IIS://<servername>/<service>/<siteID>/Root[/<vdir>]"
  //    for example "IIS://localhost/W3SVC/1/Root" 
  //  vDirName is of the form "<name>", for example, "MyNewVDir"
  //  physicalPath is of the form "<drive>:'<path>", for example,"C:'Inetpub'Wwwroot"

  try
  {
    DirectoryEntry site = new DirectoryEntry(metabasePath);
   string className = site.SchemaClassName.ToString();
  if ((className.EndsWith("Server")) || (className.EndsWith("VirtualDir")))
  {
  DirectoryEntries vdirs = site.Children;
  DirectoryEntry newVDir = vdirs.Add(vDirName, (className.Replace("Service", "VirtualDir")));
  newVDir.Properties["Path"][0] = physicalPath;
  newVDir.Properties["AccessScript"][0] = true;
  // These properties are necessary for an application to be created.
  newVDir.Properties["AppFriendlyName"][0] = vDirName;
  newVDir.Properties["AppIsolated"][0] = "1";
  newVDir.Properties["AppRoot"][0] = "/LM" + metabasePath.Substring(metabasePath.IndexOf("/", ("IIS://".Length)));
  newVDir.CommitChanges();

}
else
  }
 catch (Exception ex)
 {
 }
}

通常你不能在根路径之外创建文件夹,也就是说,如果你的应用程序在C:'inetpub'testapp中,你只能在testapp中创建一个文件夹。这个限制是出于安全原因,因为web服务器不允许访问根文件夹以上的任何内容。

此外,不建议写入根文件夹中的任何文件夹/文件,因为写入根文件夹会导致appdomain在一定数量的写入(默认为15)后回收,从而导致会话丢失。请看我的回答。

但是有一个解决方法

添加服务器到web的路径。配置,然后在代码中获取它。在web.config

的appsettings部分使用如下内容
<add key="logfilesPath" value="C:'inetpub'MyAppLogs" />

创建上述路径的文件夹,并将Users组添加到文件夹中,并赋予该组完全权限(读/写)。(添加权限非常重要)

在你的代码中,你可以获取如下

string loggerPath = (ConfigurationManager.AppSettings["logfilesPath"]);

希望能有所帮助