我如何将文件保存在IIS文件夹内的应用程序文件夹外的asp.net
本文关键字:文件夹 应用程序 net asp IIS 文件 存在 保存 | 更新日期: 2023-09-27 18:12:03
在我的web应用程序中,我有一些文件是在应用程序中保存的,它创建了一个文件夹来保存文件,但我需要将这些文件保存在应用程序之外,并在IIS中。我该怎么做呢?在应用程序文件夹中,我们使用下面的代码
Server.MapPath(Path)
For Saving in IIS如何写?
Thank you
您需要创建一个指向外部文件夹的虚拟目录。转到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"]);
希望能有所帮助