0

以下のコードは、私のウェブサイトで写真を挿入するために使用されています。私のコンピューターでは写真を挿入できますが、リモートマシンに転送するとエラーメッセージが表示されます。コードは次のとおりです。

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」へのアクセスが拒否されました。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.UnauthorizedAccessException: パス 'D:\Hosting\4423045\html\please-god\UploadedImages\3.jpg' へのアクセスが拒否されました。

ASP.NET は、要求されたリソースへのアクセスを許可されていません。リソースへのアクセス権を ASP.NET 要求 ID に付与することを検討してください。ASP.NET には、アプリケーションが偽装していない場合に使用されるベース プロセス ID (通常、IIS 5 では {MACHINE}\ASPNET、IIS 6 ではネットワーク サービス) があります。アプリケーションが を介して偽装している場合、ID は匿名ユーザー (通常は IUSR_MACHINENAME) または認証された要求ユーザーになります。

ファイルへの ASP.NET アクセスを許可するには、エクスプローラーでファイルを右クリックし、[プロパティ] を選択して、[セキュリティ] タブを選択します。[追加] をクリックして、適切なユーザーまたはグループを追加します。ASP.NET アカウントを強調表示し、必要なアクセスのボックスをオンにします。

ソース エラー:

Line 21: If imageUpload.HasFile Then Line 22:
Dim baseDirectory As String = Server.MapPath("~/UploadedImages/") Line 23:
imageUpload.SaveAs(baseDirectory & pictureIDJustAdded & ".jpg") Line 24: End If Line 25 : End If ソース ファイル: D:\Hosting\4423045\html\please-god\PhotoAdmin\Default.aspx.vb 行: 23

スタックトレース:

[UnauthorizedAccessException: パス 'D:\Hosting\4423045\html\please-god\UploadedImages\3.jpg' へのアクセスが拒否されました。]
System.IO.__Error.WinIOError(Int32 errorCode, String MaybeFullPath) +7715167 System.IO .FileStream.Init(文字列パス、FileMode モード、FileAccess アクセス、Int32 権限、Boolean useRights、FileShare 共有、Int32 bufferSize、FileOptions オプション、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy) +1162
System.IO.FileStream..ctor(Stringパス、FileMode モード、FileAccess アクセス、FileShare 共有、Int32 bufferSize、FileOptions オプション、String msgPath、Boolean 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) in D:\Hosting\4423045\html\please-god\PhotoAdmin\Default.aspx.vb:23 System.Web.UI.WebControls.DetailsView.OnItemInserted(DetailsViewInsertedEventArgs e) +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 causeValidation) +274 System.Web.UI.WebControls.DetailsView.HandleEvent(EventArgs e, Boolean causeValidation, 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.LinkBut​​ton.OnCommand(CommandEventArgs e) +118
System.Web.UI.WebControls .LinkBut​​ton.RaisePostBackEvent(String eventArgument) +135
System.Web.UI.WebControls.LinkBut​​ton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) + 1565

4

3 に答える 3

2

Web サイトを実行している IIS またはサーバーに、そのディレクトリへの書き込み権限があることを確認する必要があります。そのフォルダーを選択してこれを行うことができます->プロパティ->セキュリティタブ。

それでも問題が解決しない場合は、イベント ログを再チェックして、どのアカウントでアクセスしようとしたかを調べることができます。

この投稿も読みたいかもしれません。

于 2011-01-17T06:33:23.443 に答える
0

アプリケーション プールを正しい権限を持つユーザーに設定していても、web.config で偽装をオンにすると、このエラーが発生します。

この行を web.config から削除すると、偽装がオフになります。

<identity impersonate="true" />
于 2014-02-14T16:44:17.803 に答える