Как сохранить файлы в папке в IIS или за пределами папки приложения в asp.net

В моем веб-приложении у меня есть некоторые файлы, которые сохраняются в приложении, создается папка для сохранения файлов, но мне нужно сохранить эти файлы вне приложения и внутри IIS. Как я могу это сделать? В папке приложения мы используем код ниже

Server.MapPath(Path) 

Для сохранения в IIS Как я могу писать?

Спасибо


person Community    schedule 07.10.2016    source источник
comment
Вы проверяли ответы?   -  person Ravi A.    schedule 10.10.2016


Ответы (2)


вам нужно создать виртуальный каталог, который указывает на папку снаружи. Перейдите в 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)
 {

 }
}
person Sujit.Warrier    schedule 07.10.2016
comment
Можно ли создать каталог динамически? и программно, как я могу получить доступ к каталогу? - person ; 07.10.2016
comment
Я думаю, ты не можешь. извините игнорируйте предыдущий комментарий - person Sujit.Warrier; 07.10.2016
comment
Спасибо #Mysterio11, вот как я могу получить доступ к виртуальному каталогу? если я пытаюсь использовать Server.Mappath, но он обращается к пути приложения. - person ; 07.10.2016

Обычно вы не можете создать папку вне корневого пути, т. е. если ваше приложение находится, скажем, в C:\inetpub\testapp, вы можете создать папку только внутри testapp. Это ограничение связано с соображениями безопасности, когда веб-сервер не должен разрешать доступ к чему-либо выше корневой папки.

Кроме того, не рекомендуется записывать какие-либо папки/файлы в корневую папку, так как запись в корневую папку приводит к перезапуску домена приложения после определенного количества записей (по умолчанию 15), что приводит к потере сеанса. см. мой ответ здесь.

Однако есть обходной путь

Добавьте путь к вашему серверу в web.config, а затем выберите его в своем коде. Используйте что-то вроде ниже в разделе настроек приложения web.config.

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

Создайте папку по указанному выше пути и добавьте группу Users в свою папку и предоставьте этой группе полные права (чтение/запись). (Добавление разрешения очень важно)

В вашем коде вы можете получить, как показано ниже

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

Надеюсь это поможет

person Ravi A.    schedule 09.10.2016