2016-10-07 3 views
0

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

Server.MapPath(Path) 

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

Спасибо

+0

Проверили ли вы ответы? –

ответ

0

вам нужно создать виртуальный каталог, который указывает ти папку снаружи. Перейдите в IIS, щелкните правой кнопкой мыши на своем веб-сайте. нажмите «Добавить виртуальную директиву» в меню. Создайте псевдоним для каталога, выберите нужную папку, и все готово. он будет рассматривать эту внешнюю папку как внутреннюю папку и работать одинаково. проверьте эту ссылку How to: Create and Configure Virtual Directories in IIS 7.0

Отказ от ответственности: но вам нужно будет сделать это после размещения в iis i.e публикации. при использовании visual studio в среде dev. Отладка будет сохранена только во внутренних каталогах

Редактировать: для создания виртуальных каталогов это код. Я не проверял его действительность.

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) 
{ 

} 
} 
+0

можно ли создать каталог динамически? и программно, как я могу получить доступ к Каталогу? –

+0

Я думаю, вы не можете. К сожалению, игнорировать предыдущий комментарий –

+0

Спасибо # Mysterio11, Здесь как я могу получить доступ к Виртуальному каталогу? если я пытаюсь использовать Server.Mappath, но он обращается к пути приложения. –

0

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

Кроме того, не рекомендуется писать папки или файлы в корневой папке, поскольку запись в корневую папку приводит к тому, что appdomain будет перерабатываться после определенного количества записей (по умолчанию 15), что приведет к потере сеанса. See my answer here.

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

Добавить путь вашего сервера в web.config, а затем принести его в code.Use то, как показано ниже в разделе AppSettings из web.config

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

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

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

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

Надеется, что это помогает

Смежные вопросы