如何在asp.net中Application文件夹外部的IIS中保存文件夹中的文件

时间:2016-10-07 07:13:46

标签: c# asp.net iis server.mappath

在我的网络应用程序中,我有一些正在保存在应用程序中的文件,它正在创建一个用于保存文件的文件夹,但我需要将这些文件保存在应用程序之外和 IIS 内。我可以做这个? 在应用程序文件夹中,我们使用下面的代码

Server.MapPath(Path) 

在IIS中保存如何编写?

谢谢

2 个答案:

答案 0 :(得分:0)

您需要创建一个指向外部文件夹的虚拟目录。 右键单击您的网站转到IIS。单击菜单中的Add Virtual directry。为目录选择一个别名,选择所需的文件夹,然后就完成了。它会将此外部文件夹视为内部文件夹,并以相同的方式工作。点击此链接How to: Create and Configure Virtual Directories in 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)
 {

 }
}

答案 1 :(得分:0)

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

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

但是有一种解决方法

将服务器的路径添加到web.config,然后在您的代码中获取它。在web.config的appsettings部分使用类似下面的内容

<add key="logfilesPath" value="C:\inetpub\MyAppLogs" />

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

在您的代码中,您可以按以下方式获取

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

希望这有帮助