Я знаю, что этот вопрос задавался здесь много раз, но я не могу найти решение своей проблемы. Я пытаюсь сохранить изображение в папку в .net c #, но получаю следующее исключение:
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)
Я дал полный контроль над этой папкой (сохранить здесь) network service
и iis_iusrs
даже дал полный контроль, everyone
но все еще получал это исключение. Я пытался дать доступ через проводник и через диспетчер IIS, до сих пор не повезло
Я делаю это на Windows Server 2008 R2 и IIS 7.5, кому мне нужно дать доступ?
Спасибо
Ответы:
Вам необходимо узнать из пула приложений для веб-сайта, под каким именем он работает (по умолчанию это так
Application Pool Identity
) и предоставить ему правильные разрешения.источник
ApplicationPoolIdentity
, как я могу дать разрешения на это?IIS APPPOOL\DefaultAppPool
пользователя. Смотрите эту статью на официальном сайте IIS: learn.iis.net/page.aspx/624/application-pool-identitiesDefaultAppPool
и далfull control
разрешения на это, но все равно получаю ту же ошибкуeveryone
полный контроль. Если мы предоставимeveryone
Полный контроль, даже тогда нам нужно предоставить доступ кDefaultAppPool
? Это сбивает с толку.Images
каталога для пользователя / удостоверения, на котором работает веб-сайт (вам нужно будет спросить об этом вашего хост-провайдера).Прочитайте сообщение внимательно. Вы пытаетесь сохранить файл, имя которого совпадает с именем каталога. Это не может работать, вы не можете перезаписать каталог, заполненный файлами, одним новым файлом. Это может привести к неустранимой потере данных: «Доступ к пути запрещен» - это файловая система, которая пытается предотвратить это.
Сообщение об исключении не является идеальным, но оно пришло прямо из ОС и было отлито из камня. Платформа часто добавляет дополнительные проверки для создания более качественных сообщений, но это дорогостоящий тест в сети. Перф это тоже особенность.
Вам нужно использовать имя типа «C: \ inetpub \ wwwroot \ mysite \ images \ savehere \ mumble.jpg». Рассмотрим Path.Combine (), чтобы надежно генерировать имя пути.
источник
У меня возникла та же проблема при попытке создать файл на сервере (на самом деле файл, который является копией из шаблона).
Вот полное сообщение об ошибке:
Я добавил новую папку
Templates
внутри папки приложения IIS. В моем случае очень важно то, что мне нужно было дать разрешение на запись (Gravar) для пользователя IUSR в этой папке. Вам также может понадобиться датьNetwork Service
иASP.NET v$.#
то же разрешение на запись.После этого все работает как положено.
источник
У меня была точно такая же проблема.
Решение было то , что файл я пытался получить доступ был только для чтения , так как он был скопирован из файла шаблона , который был доступен только для чтения.
<facepalm />
источник
Эта проблема возникает при попытке сохранить файл без указания имени файла.
Старый код
Рабочий код
источник
Моя проблема заключалась в том, что мне нужно было запрашивать только доступ для чтения:
источник
Каким удостоверением является ваш пул приложений для веб-приложения, в котором для устранения неполадок попробуйте создать новый пул приложений с использованием, скажем, сетевой службы в качестве идентификатора, и заставить ваше веб-приложение использовать созданный вами новый пул приложений и посмотреть, не исчезнет ли ошибка.
источник
Следующий совет не является ответом на оригинальный вопрос этой темы, но может помочь некоторым другим пользователям, которые оказались на этой веб-странице, после той же самой глупой ошибки, которую я только что сделал ...
Я пытался получить элемент управления ASP.Net FileUpload для загрузки его файла на сетевой адрес, который содержал « скрытый общий ресурс », а именно:
\ MyNetworkServer \ с $ \ SomeDirectoryOrOther
Я не поняла это. Если бы я запускал веб-страницу в режиме отладки в Visual Studio, она бы работала нормально. Но когда проект был развернут и работал через пользователя пула приложений, он отказался найти этот сетевой каталог.
Я проверил, под каким пользователем работает мой сайт IIS, дал ему полные права доступа к этому каталогу на сервере « MyNetworkServer » и т. Д. И т. Д., Но ничего не получалось.
Причина (конечно!) В том, что только администраторы могут «видеть» эти скрытые общие папки.
Моим решением было просто создать «нормальную» акцию для
\ MyNetworkServer \ SomeDirectoryOrOther
и это избавило от ошибки «Доступ к пути ... запрещен». FileUpload смог успешно выполнить команду
Надеюсь, что это поможет некоторым другим пользователям, которые совершают ту же ошибку, что и я!
Также обратите внимание, что если вы загружаете большие файлы (более 4 МБ), то IIS7 требует, чтобы вы изменили файл web.config в двух местах. Нажмите на эту ссылку, чтобы прочитать, что вам нужно сделать: Загрузка больших файлов в ASP.Net
источник
пожалуйста, добавьте IIS_IUSERS полный доступ к вашей папке. Вы найдете эту опцию на вкладке безопасности в свойствах папки.
источник
Я решил с этой настройкой:
источник
Моя проблема была что-то вроде этого:
но вместо использования пути я должен использовать File.FullName ... Я не знаю, поможет ли он кому-то еще, просто передам свой собственный опыт с данной ошибкой!
источник
Измените настройку со встроенной учетной записи на настраиваемую учетную запись и введите имя пользователя и пароль другого сервера.
Сохраняйте настройку как интегрированную (вместо классического режима).
источник
Может быть, это поможет тебе.
источник
Сделайте директорию сохранения здесь виртуальной директорией и дайте разрешение на чтение / запись с панели управления
источник
У меня был каталог с тем же именем, что и файл, который я пытался записать, так что люди тоже могли бы позаботиться об этом.
источник
Я столкнулся с этой проблемой при разработке на своей локальной рабочей станции.
После нескольких неудачных
iisreset
вызовов я исправил ситуацию, перезагрузив компьютер.Оглядываясь назад, дескриптор открытого файла мог вызывать проблемы.
источник
В моем случае мне пришлось добавить Правило авторизации .NET для веб-сайта в IIS.
Я добавил правило, разрешающее анонимным пользователям.
источник
У меня была та же проблема, но я исправил ее, сохранив файл в другом месте, а затем скопировав файл и вставив его в то место, где я хотел. Я использовал опцию, чтобы заменить существующий файл, и это помогло мне. Я знаю, что это не самый эффективный способ, но он работает и занимает менее 15 секунд.
источник
У меня было много проблем с этим, в частности, из-за моего кода, работающего локально, но когда мне нужно было запустить его на IIS, он выдавал эту ошибку. Я обнаружил, что добавление проверки к моему коду и разрешение приложению создавать папку при первом запуске исправило проблему, не связываясь с авторизацией папок.
как-то так, прежде чем вызывать свой метод, который использует папку
источник
Если вы получаете эту ошибку при загрузке файлов в суб-домене и работают правильно в вашем
localhost
, то выполните следующие действия:Решение:
Панель Plesk
CPanel
Для более подробной информации обратитесь сюда
Причина ошибки:
FileUpload.SaveAs(Server.MapPath("~/uploads/" + *YOUR_FILENAME*))
это будет ваш код для перемещения ваших файлов на путь загрузки.Server.MapPath
даст вам физический путь (реальный путь) каталога. Но ваш субдомен может не иметь разрешения на доступ к физическому пути.Таким образом, если вы дадите разрешение субдомену на доступ к записи / изменению, это решит проблему.
источник
Вы можете попытаться проверить, не переключались ли ваши веб-свойства для проекта на IIS Express, и изменить его обратно на IIS Local.
источник
Убедитесь, что ваша цель
System.IO.Delete(string file)
- это файл, который существует. Возможно, в вашем коде есть ошибка, как будто вы не передаете правильное имя файла методу или ваша цель - папка. В этих случаях вы увидите: «ошибка доступа к пути запрещена».источник
Я создал виртуальный каталог с полным разрешением и добавил туда исходный код ffmpeg и видеофайлы, так что, наконец, это стало понятно, так как это может быть доступно любому.
источник