ASP.NET: периодическая ошибка «Отказано в доступе» при загрузке файлов - PullRequest
0 голосов
/ 22 декабря 2008

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

>     System.UnauthorizedAccessException:
> Access to the path
> '\\fsvs02\target03\352972\352974\www.mysite.com\web\content\Images\TempStorage\tempImage.jpg'
> is denied.
>        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)
>        at System.IO.FileStream..ctor(String
> path, FileMode mode)
>        at System.Web.HttpPostedFile.SaveAs(String
> filename)
>        at uploadimage.UploadImage()

Быстрый поиск в Google подтвердил, что это проблема с разрешениями; но так как это происходит только периодически, у меня нет плана для диагностики, как это исправить.

Мой вопрос: что мне делать, чтобы диагностировать и исправить эту проблему?

Ответы [ 4 ]

2 голосов
/ 23 декабря 2008

Загружаете ли вы файл с одинаковым именем файла для каждого пользователя (из сообщения об ошибке видно, что это так)? Если так, то, вероятно, как говорит Ади. Вместо этого используйте Path.GetTempFileName, чтобы создать имя файла для вашего временного файла, который не будет конфликтовать с тем, который уже существует. Обязательно переместите или удалите файл, когда закончите, иначе жесткий диск будет заполнен временными файлами.

0 голосов
/ 22 декабря 2008

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

0 голосов
/ 22 декабря 2008

Что не было упомянуто, если ваше веб-приложение является общедоступным Интернетом или частной интрасетью и использует аутентификацию Windows ? В такой ситуации это могут быть пользователи, которым разрешено (через разрешения NTFS) загружать в эту папку, а другим - нет. Они аутентифицируются своими учетными записями пользователей вместо анонимной сетевой службы или другой учетной записи, используемой для пула приложений IIS.

0 голосов
/ 22 декабря 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...