Ответ 1
Вам нужно узнать из пула приложений для веб-сайта, в каком идентификаторе он работает (по умолчанию это Application Pool Identity
) и предоставить правильные разрешения.
Я знаю, что этот вопрос задавали много раз здесь, но я не могу найти решение моей проблемы. Я пытаюсь сохранить изображение в папку в .net С#, но получить это исключение:
Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.The error occured at mscorlib because at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)
Я дал полный контроль над этой папкой (savehere) до network service
и iis_iusrs
, даже дал полный контроль над everyone
, но все еще получал это исключение.
Я попытался предоставить доступ через проводник и через диспетчера IIS, все еще не повезло
Я делаю это на Windows Server 2008 R2 и IIS 7.5, Кому мне нужно предоставить доступ?
Спасибо
Вам нужно узнать из пула приложений для веб-сайта, в каком идентификаторе он работает (по умолчанию это Application Pool Identity
) и предоставить правильные разрешения.
Доступ к пути 'C:\inetpub\wwwroot\mysite\images\savehere' запрещен
Внимательно прочитайте сообщение. Вы пытаетесь сохранить файл, имя которого совпадает с именем каталога. Это не может работать, вы не можете перезаписать каталог, заполненный файлами, одним новым файлом. Это может привести к неустранимой потере данных: "Доступ к пути запрещен" - это файловая система, борющаяся за предотвращение этого.
Сообщение об исключении не является идеальным, но оно пришло прямо из ОС и было отлито из камня. Платформа часто добавляет дополнительные проверки для создания более качественных сообщений, но это дорогостоящий тест в сети. Перф это тоже особенность.
Вам нужно использовать имя типа "C:\inetpub\wwwroot\mysite\images\savehere\mumble.jpg". Рассмотрим Path.Combine(), чтобы надежно сгенерировать имя пути.
У меня была такая же проблема при попытке создать файл на сервере (фактически файл, являющийся копией из шаблона).
Здесь отображается полное сообщение об ошибке:
{ERROR} 08/07/2012 22:15:58 - System.UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\SAvE\Templates\Cover.pdf' is denied.
Я добавил новую папку под названием Templates
в папку приложения IIS. Одна очень важная вещь в моем случае заключается в том, что мне нужно было предоставить разрешение Write (Gravar) для пользователя IUSR в этой папке. Вам также может потребоваться предоставить Network Service
и ASP.NET v$.#
одно и то же разрешение на запись.
После этого все работает так, как ожидалось.
У меня была точно такая же проблема.
Решением было то, что файл, который я пытался получить, был readonly, поскольку он был скопирован из файла шаблона, который был только для чтения.
< facepalm/ >
У меня возникла эта проблема, когда я пытаюсь сохранить файл без указания имени файла.
Старый код
File.WriteAllBytes(@"E:\Folder", Convert.FromBase64String(Base64String));
Рабочий код
File.WriteAllBytes(@"E:\Folder\"+ fileName, Convert.FromBase64String(Base64String));
Моя проблема заключалась в том, что я должен был запрашивать только доступ для чтения:
FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read);
пожалуйста, добавьте IIS_IUSERS разрешение на полный доступ к вашей папке. Вы найдете эту опцию на вкладке безопасности в свойствах папки.
Какая идентификация - это ваш пул приложений для веб-приложения, выполняющегося как, для устранения неполадок, попробуйте создать новый пул приложений, например, сообщите Network Service как свою личность и сделайте, чтобы ваше веб-приложение использовало этот новый пул приложений, который вы создали, и посмотрите, сохраняется ли ошибка,
Следующий совет не является ответом на этот вопрос, но может помочь другим пользователям, которые попадают на эту веб-страницу, после того, как я сделал ту же самую глупую ошибку, которую я только что сделал...
Я пытался получить элемент управления ASP.Net FileUpload для загрузки этого файла на сетевой адрес, содержащий "скрытую долю", а именно:
\MyNetworkServer\с $\ SomeDirectoryOrOther
Я этого не понимал. Если я запустил веб-страницу в режиме отладки в Visual Studio, все будет хорошо. Но когда проект был развернут и запущен через пользователя пула приложений, он отказался найти этот сетевой каталог.
Я проверил, какой пользователь мой сайт IIS работает, дал этому пользователю полные разрешения для этого каталога на сервере MyNetworkServer и т.д. и т.д., но ничего не получилось.
Причина (конечно!) заключается в том, что только "Администраторы" могут "видеть" эти скрытые диски.
Моим решением было просто создать "нормальный" ресурс для
\MyNetworkServer\SomeDirectoryOrOther
и это избавилось от ошибки "Доступ к пути... отрицается". FileUpload смог успешно выполнить команду
fileUpload.SaveAs(networkFilename);
Надеюсь, это поможет некоторым другим пользователям, которые совершили ту же ошибку, что и я!
Обратите внимание, что если вы загружаете большие файлы (более 4 МБ), то IIS7 требует, чтобы вы изменили файл web.config в двух местах. Нажмите эту ссылку, чтобы прочитать, что вам нужно сделать: Загрузка больших файлов в ASP.Net
I Решено с этой настройкой:
IIS > Пулы приложений > [ваш сайт] > Дополнительные настройки... > Идентификация > Встроенная поддержкa > LocalSystem
Моя проблема была примерно такая:
FileStream ms = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
но вместо использования пути я должен использовать File.FullName... Я не знаю, поможет ли это кому-либо другому, просто передав мой собственный опыт с этим erro!
Измените настройку со встроенной учетной записи на пользовательскую учетную запись и введите имя и пароль другого сервера.
Сохраните настройку как встроенную (вместо классического режима).
Может быть, это поможет тебе.
string tempDirectoryPath = @"C:\Users\HOPE\Desktop\Test Folder";
string zipFilePath = @"C:\Users\HOPE\Desktop\7za920.zip";
Directory.CreateDirectory(tempDirectoryPath);
ZipFile.ExtractToDirectory(zipFilePath, tempDirectoryPath);
Сделать каталог Сохранить > виртуальным каталогом и предоставить разрешение на чтение/запись с панели управления
Имел каталог с тем же именем, что и файл, который я пытался написать, так что люди тоже могут это учесть.
Я столкнулся с этой проблемой при разработке на своей локальной рабочей станции.
После нескольких неудачных вызовов iisreset
я исправил эту ситуацию с помощью перезагрузки моей машины.
В ретроспективе дескриптор открытого файла может вызвать проблемы.
В моем случае мне пришлось добавить правило авторизации .NET для веб-сайта в IIS.
Я добавил правило для анонимных пользователей.
У меня была та же проблема, но я исправил ее, сохранив файл в другом месте, а затем скопировав файл и вставив его в то место, где я хотел. Я использовал опцию, чтобы заменить существующий файл, и это помогло мне. Я знаю, что это не самый эффективный способ, но он работает и занимает менее 15 секунд.
Я наконец-то нашел ответ для 2019. Вам нужно добавить "IIS APPPOOL\DefaultAppPool" в список пользователей, которые имеют права доступа к каталогу, который нужно изменить. Убедитесь, что у них есть полные права.
У меня было много проблем с этим, в частности, из-за моего кода, работающего локально, но когда мне нужно было запустить его на IIS, он выдавал эту ошибку. Я обнаружил, что добавление проверки к моему коду и разрешение приложению создавать папку при первом запуске исправило проблему, не связываясь с авторизацией папок.
как-то так, прежде чем вызывать свой метод, который использует папку
bool exists = System.IO.Directory.Exists("mypath");
if (!exists)
System.IO.Directory.CreateDirectory("mypath");
Я создал виртуальный каталог с полным разрешением и добавил туда исходные файлы и видеофайлы ffmpeg, так что, наконец, это имело смысл, поскольку это может быть доступно любому.