Невозможно сохранить файл с помощью ASP.NET FileUpload - доступ запрещен

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

Protected Sub dvPictureInsert_ItemInserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertedEventArgs) Handles dvPictureInsert.ItemInserted

    'If the record was successfully inserted, save the picture
    If e.AffectedRows > 0 Then

        'Determine the maximum pictureID for this user
        Dim results As DataView = CType(maxPictureIDDataSource.Select(DataSourceSelectArguments.Empty), DataView)
        Dim pictureIDJustAdded As Integer = CType(results(0)(0), Integer)
        'Reference the FileUpload control
        Dim imageUpload As FileUpload = CType(dvPictureInsert.FindControl("imageUpload"), FileUpload)

        If imageUpload.HasFile Then
            Dim baseDirectory As String = Server.MapPath("~/UploadedImages/")
            imageUpload.SaveAs(baseDirectory & pictureIDJustAdded & ".jpg")
        End If

Вот сообщение об ошибке:

Ошибка сервера в приложении '/ please-god'. Доступ к пути 'D: \ Hosting \ 4423045 \ html \ please-god \ UploadedImages \ 3.jpg' запрещен. Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительных сведений об ошибке и ее происхождении в коде.

Сведения об исключении: System.UnauthorizedAccessException: доступ к пути 'D: \ Hosting \ 4423045 \ html \ please-god \ UploadedImages \ 3.jpg' запрещен.

ASP.NET не авторизован для доступа к запрошенному ресурсу. Рассмотрите возможность предоставления прав доступа к ресурсу удостоверению запроса ASP.NET. ASP.NET имеет базовый идентификатор процесса (обычно {MACHINE} \ ASPNET в IIS 5 или сетевая служба в IIS 6), который используется, если приложение не олицетворяет себя. Если приложение олицетворяет через, удостоверением будет анонимный пользователь (обычно IUSR_MACHINENAME) или аутентифицированный пользователь запроса.

Чтобы предоставить ASP.NET доступ к файлу, щелкните файл правой кнопкой мыши в проводнике, выберите «Свойства» и выберите вкладку «Безопасность». Нажмите «Добавить», чтобы добавить соответствующего пользователя или группу. Выделите учетную запись ASP.NET и установите флажки для желаемого доступа.

Ошибка источника:

Строка 21: Если imageUpload.HasFile, то Строка 22:
Dim baseDirectory As String = Server.MapPath ("~ / UploadedImages /") Строка 23:
imageUpload.SaveAs (baseDirectory & pictureIDJustAdded & ".jpg") Строка 24: Конец, если Строка 25: Конец, если Исходный файл: D: \ Hosting \ 4423045 \ html \ please-god \ PhotoAdmin \ Default.aspx.vb Строка: 23

Трассировки стека:

Вы должны убедиться, что у IIS или сервера, на котором запущен веб-сайт, есть разрешение на запись в этот каталог. Вы можете сделать это, выбрав эту папку -> Свойства-> вкладка Безопасность.


person onfire4JesusCollins    schedule 17.01.2011    source источник
comment
[UnauthorizedAccessException: доступ к пути 'D: \ Hosting \ 4423045 \ html \ please-god \ UploadedImages \ 3.jpg' запрещен.]
System.IO .__ Error.WinIOError (Int32 errorCode, String mightFullPath) +7715167 System.IO.FileStream.Init (строковый путь, режим FileMode, доступ к FileAccess, права Int32, логические права использования, общий ресурс FileShare, Int32 bufferSize, параметры FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) +1162
System.IO. FileStream..ctor (строковый путь, режим FileMode, доступ к FileAccess, общий ресурс FileShare, Int32 bufferSize, параметры FileOptions, String msgPath, логическое значение bFromProxy) +61 System.IO.FileStream..ctor (путь String, режим FileMode) +55
System.Web.HttpPostedFile.SaveAs (имя файла строки) +99
System.Web.UI.WebControls.FileUpload.SaveAs (имя файла строки) +23
PhotoAdmin_Default.dvPictureInsert_ItemInserted (отправитель объекта, DetailsViewInsertedEventArgs e) в D: \ Hosting \ 4423045 \ html \ please-god \ PhotoAdmi n \ Default.aspx.vb: 23 System.Web.UI.WebControls.DetailsView.OnItemInserted (DetailsViewInsertedEventArgs e) +108
System.Web.UI.WebControls.DetailsView.HandleInsertCallback (Int32 blockedRows, Exception ex) +69 < br> System.Web.UI.DataSourceView.Insert (значения IDictionary, обратный вызов DataSourceViewOperationCallback) +134
System.Web.UI.WebControls.DetailsView.HandleInsert (String commandArg, логические причиныValidation) +274 System.Web.UI.WebControls .DetailsView.HandleEvent (EventArgs e, логические причиныValidation, String validationGroup) +676
System.Web.UI.WebControls.DetailsView.OnBubbleEvent (источник объекта, EventArgs e) +95
System.Web.UI.Control. RaiseBubbleEvent (источник объекта, аргументы EventArgs) +37
System.Web.UI.WebControls.DetailsViewRow.OnBubbleEvent (источник объекта, EventArgs e) +113
System.Web.UI.Control.RaiseBubbleEvent (источник объекта, EventArgs args) +37
System.Web.UI.WebControls.LinkButton.OnCommand (CommandEventArgs e) +1 18
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent (String eventArgument) +135
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (String event10 System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData) +175
BooleanWeb.UI. , Логическое includeStagesAfterAsyncPoint) +1565   -  person Shimmy Weitzhandler    schedule 18.01.2011


Ответы (3)


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

Вы также можете прочитать этот пост.

Даже если у вас есть пул приложений, настроенный на пользователя с правильными правами, если в вашем web.config включено олицетворение, вы получите эту ошибку.

person Shimmy Weitzhandler    schedule 17.01.2011

Удаление этой строки из вашего web.config отключит олицетворение.

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

<identity impersonate="true" />
, чтобы понять, в чем проблема. И проблема была в том, что я не указывал имя файла в методе загрузки файла _2_. Я знаю, что оператор указывает правильный путь, но это может случиться с кем-то еще в будущем.

<identity impersonate="true" />
person Jason Geiger    schedule 14.02.2014

Как мой код выглядел раньше:
fileupload.SaveAs(Server.MapPath($"{basedir}"));

Как это выглядит сейчас:
fileupload.SaveAs(Server.MapPath($"{basedir}/{fileupload.FileName}"));

возможный дубликат проблема управления asp.net FileUpload: доступ к каталог запрещен

person Jamshaid K.    schedule 29.06.2018