0

ASP.NET: Ошибка "Доступ к пути запрещен" при загрузке файлов на веб-сервер Windows Server 2008 R2

13

У меня есть веб-приложение на ASP.NET, которое загружает файлы в определенную папку на веб-сервере. На локальном сервере все работает отлично, но после развертывания приложения на веб-сервере я начинаю получать ошибку "Доступ к пути "D:\Attachments\myfile.doc" запрещен". Я предоставил пользователю "IIS AppPool", под которым работает приложение, полные права на эту папку. Я даже дал полные права группе "Все", но ошибка по-прежнему persists.

Я добавил папку в список исключений антивируса, но результат остался тем же. Я начинаю подозревать, что, возможно, на Windows Server 2008 R2 существует какая-то особенность, которая мешает моей загрузке работать. Буду признателен за вашу помощь.

Спасибо!

5 ответ(ов)

0

Щелкните правой кнопкой мыши на вашей папке на сервере или локальной машине и дайте полные права пользователю

IIS_IUSRS.

На этом всё!

0

Ваш аккаунт ASP.NET {MACHINE}\ASPNET не имеет прав на запись в эту локализацию. Именно поэтому возникает ошибка.

Рекомендуется предоставить права доступа к ресурсу для идентификации запроса ASP.NET. Для этого выполните следующие шаги:

  1. Щелкните правой кнопкой мыши на папке, где происходит загрузка файлов, и выберите Свойства.
  2. Перейдите на вкладку Безопасность и нажмите Изменить.
  3. Нажмите Добавить, затем выберите Местоположения и укажите ваш локальный компьютер.
  4. Нажмите ОК, затем в поле "Введите имя объекта для выбора" введите ASPNET и нажмите Проверить имена.
  5. Установите флажки для нужных прав доступа (например, Полный доступ).

Если это не сработает, выполните те же шаги, добавив Network Service.

Теперь у вас должно отобразиться {MACHINENAME}\ASPNET, и вы сможете установить разрешение на запись для этой учетной записи.

Если же приложение использует подмену идентификации через <identity impersonate="true"/>, то идентификация будет анонимным пользователем (обычно IUSR_MACHINENAME) или аутентифицированным пользователем запроса.


Либо вы можете использовать выделенную папку для хранения файлов в ASP.NET, которая называется App_Data. Чтобы создать её, щелкните правой кнопкой мыши на вашем проекте ASP.NET (в Visual Studio) и выберите Добавить > Добавить папку ASP.NET > App_Data. После этого вы сможете сохранять данные в этом месте:

var path = Server.MapPath("~/App_Data/file.txt");
System.IO.File.WriteAllText(path, "Hello World");
0

Проблема может заключаться в том, что у службы Network Service нет прав на чтение.

Решение:

Щелкните правой кнопкой мыши на вашей папке загрузки → Свойства → Безопасность → Изменить → Добавить → введите: NETWORK SERVICE → установите флажок "Полный доступ" → нажмите OK или Применить.

0

Если кто-то столкнётся с этой проблемой и найдёт этот ответ в поиске Google, имейте в виду, что необходимо указывать имя файла в методе SaveAs.

Вариант без имени файла не сработает:

file_upload.PostedFile.SaveAs(Server.MapPath(SaveLocation));

Вам нужно сделать так:

filename = Path.GetFileName(file_upload.PostedFile.FileName);
file_upload.PostedFile.SaveAs(Server.MapPath(SaveLocation + "\\" + filename));

Я предполагал, что метод SaveAs автоматически использует загруженное имя файла, но в итоге получал ошибку "Доступ запрещен". Ошибка не очень информативна и не объясняет суть проблемы.

0

Я сталкивался с этой проблемой однажды, и в моем случае решение заключалось в закрытии любого процесса в диспетчере задач, который использует или обращается к этому файлу.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь