Невозможно сохранить файл с ASP.NET FileUpload - доступ запрещен - PullRequest
0 голосов
/ 17 января 2011

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

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: \ хостинг \ 4423045 \ HTML \ пожалуйста бог \ UploadedImages \ 3.jpg' отказано. Описание: необработанный исключение произошло во время выполнение текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для более информация об ошибке и где это произошло в коде.

Сведения об исключении: System.UnauthorizedAccessException: Доступ к пути 'D: \ хостинг \ 4423045 \ HTML \ пожалуйста бог \ UploadedImages \ 3.jpg' отказано.

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

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

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

Строка 21: Если imageUpload.HasFile Then Line 22:
Dim baseDirectory As String = Server.MapPath ( "~ / UploadedImages /") Строка 23:
imageUpload.SaveAs (baseDirectory & pictureIDJustAdded & ".jpg") Строка 24: Конец, если строка 25: Конец, если источник Файл: D: \ хостинг \ 4423045 \ HTML \ пожалуйста бог \ PhotoAdmin \ Default.aspx.vb Линия: 23

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

[UnauthorizedAccessException: доступ к пути 'D: \ хостинг \ 4423045 \ HTML \ пожалуйста бог \ UploadedImages \ 3.jpg' отказано.]
System.IO .__ Error.WinIOError (Int32 errorCode, String MaybeFullPath) +7715167 System.IO.FileStream.Init (String path, Режим FileMode, доступ к FileAccess, Права Int32, логические права использования, Общий доступ к FileShare, размер буфера Int32, Опции FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) + 1162
System.IO.FileStream..ctor (String путь, режим FileMode, FileAccess доступ, общий доступ к FileShare, Int32 bufferSize, параметры FileOptions, Строка msgPath, логическое bFromProxy) +61 System.IO.FileStream..ctor (String путь, режим FileMode) + 55
System.Web.HttpPostedFile.SaveAs (String имя файла) + 99
System.Web.UI.WebControls.FileUpload.SaveAs (String имя файла) + 23
PhotoAdmin_Default.dvPictureInsert_ItemInserted (Объект отправитель, DetailsViewInsertedEventArgs д) в D: \ хостинг \ 4423045 \ HTML \ пожалуйста бога \ PhotoAdmin \ Default.aspx.vb: 23 System.Web.UI.WebControls.DetailsView.OnItemInserted (DetailsViewInsertedEventArgs д) + 108
System.Web.UI.WebControls.DetailsView.HandleInsertCallback (Int32 Пострадавшие строки, исключение ex) + 69
System.Web.UI.DataSourceView.Insert (IDictionary ценности, DataSourceViewOperationCallback обратный звонок) + 134
System.Web.UI.WebControls.DetailsView.HandleInsert (String commandArg, Boolean reasonValidation) +274 System.Web.UI.WebControls.DetailsView.HandleEvent (EventArgs e, Булевы причины Валидации, Строка validationGroup) + 676
System.Web.UI.WebControls.DetailsView.OnBubbleEvent (Объект источник, EventArgs e) + 95
System.Web.UI.Control.RaiseBubbleEvent (Объект источник, EventArgs args) + 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) + 118
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent (String eventArgument) + 135
System.Web.UI.WebControls.LB.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (String eventArgument) + 10
System.Web.UI.Page.175
System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint) + 1565

Ответы [ 3 ]

1 голос
/ 17 января 2011

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

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

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

0 голосов
/ 29 июня 2018

Сегодня у меня была такая же проблема, я тестировал ее локально и на живом сервере, но одна и та же ошибка меня расстраивала.Затем я решил критически пересмотреть свой code, чтобы понять, что является причиной проблемы.И проблема была в том, что я не указывал имя файла в методе fileupload SaveAs().Я знаю, что операция указывает правильный путь, но это может произойти с кем-то еще в будущем, возможно.

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

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

0 голосов
/ 14 февраля 2014

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

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

<identity impersonate="true" />
...