0

こんにちは、asp.net で画像をアップロードするときに問題が発生しているようです。画像をアップロードしようとすると、次のエラーが表示されます。

パス 'D:\Projects IDE\Visual Studio\MyWork\Websites\Forum\Images\avatar\userAvatars\aleczandru' へのアクセスが拒否されました。

アプリケーション プール ID を NETWORKSERVICE に設定し、完全な権限で NETWORK SERVICE アカウントを Images フォルダーに追加しましたが、それでも同じエラーが発生します。

これは私のコードです:

private void addImageToApp()
{
    string path = "~/Images/avatar/userAvatars/" + User.Identity.Name;

    createPath(path);
    if( Directory.Exists(HostingEnvironment.MapPath(path)))
    {
        //try {
              UploadImage.SaveAs(HostingEnvironment.MapPath(path));
          //    MultiViewIndex.ActiveViewIndex = 0;
        //}catch(Exception ex)
        //{
          //     AvatarDetails.Text = ex.Message;
        //}  
    }
}

private void createPath(string path)
{  
    string activeDir = HostingEnvironment.MapPath("~/Images/avatar/userAvatars");
    if( !Directory.Exists(Server.MapPath(path)) )
    {
        string newPath = Path.Combine(activeDir, User.Identity.Name);
        Directory.CreateDirectory(newPath);
    }
}

この問題を解決するために他に何ができますか?

編集

こんにちは、この時点で、私は次のユーザーに対して完全な権限を持っています:

  • 認証済みユーザー
  • IUSR
  • システム
  • ネットワークサービス
  • IIS_WPG
  • 管理者
  • ユーザー

これを機能させるために、IIS に構成を設定する必要がある可能性はありますか?

編集

この作業を行うために、過去数日間SQL-SERVERをいじっていたので、NETWORK SERVICEがSQL-SERVER master.dbデータベースに格納されていると理解しているものから何かを誤って構成した可能性があります.2つのネットワークがあるようですサービス ログインが問題である可能性がありますか?最初に確認したときは何もなかったのを覚えています。

ここに画像の説明を入力

編集

これは、私がフォルダーに追加したパーミッションを使用した印刷です。

ここに画像の説明を入力

編集:完全なエラー

ここに画像の説明を入力

スタックトレース:

ここに画像の説明を入力

4

5 に答える 5

5

メソッドCreatePathでは、フォルダー'D:\ Projects IDE \ Visual Studio \ MyWork \ Websites \ Forum \ Images \ avatar \ userAvatars\aleczandru'を作成しています。

次に、アップロードした画像をファイル名'D:\ Projects IDE \ Visual Studio \ MyWork \ Websites \ Forum \ Images \ avatar \ userAvatars\aleczandru'で保存しようとします。

同じ名前のフォルダとファイルを持つことはできません。これを行おうとすると、OSはアクセスが拒否されたことを通知します。

コマンドプロンプトでこれを試すとどうなりますか

フォルダ内にファイル名を作成するか、ファイルをフォルダ内aleczandruに保存するつもりだったと思いaleczandru.pngますuserAvatars

UploadImageがFileUploadコントロールであるとする、アップロードされたファイルの元のファイル名を使用して、ファイルをユーザーのフォルダーに保存できます。

UploadImage.SaveAs(HostingEnvironment.MapPath(
    Path.Combine(path, UploadImage.FileName)));
于 2012-12-11T15:51:54.487 に答える
4

パスにファイル拡張子を含む完全なファイル名があることを確認してください。

于 2012-12-11T13:28:53.013 に答える
1

わかりました... httpのPUTメソッドを実装するプロジェクトでこれを行ったことがあります。はっきりとは覚えていませんが、ヒントをいくつか。ここにヒントがあります

  1. Windows のフォルダーにアクセスするには、IIS_IUSRS を追加する必要があります。
  2. IIS管理コンソールに移動して、展開されたサイトノードをクリックし、同じフォルダー/Webサイトリクエストが着信するためのアクセス許可を設定します...どのカテゴリだったか覚えていません..その設定ペインでは、POSTのアクセス許可を追加/変更できます、GET、その他の動詞...編集すると、管理者、特定のユーザー アカウント、匿名などのオプションが表示されます。

明日返信するかもしれません...正確にそれを行う方法:-)

于 2012-12-12T23:07:33.857 に答える
0

asp.net アップロード ページが実行されているユーザーを特定する必要があります。変更しておらず、偽装で実行していない場合は、デフォルトでローカル マシンの ASPNET ユーザーに設定する必要があります。結果がどうであれ、そのユーザーにフォルダーに対する読み取り/書き込みアクセス許可を付与します。

于 2012-12-03T21:13:25.833 に答える
0

users というグループに、このディレクトリを変更する権限を与えてみてください (セキュリティの下で)。

于 2012-12-03T21:07:20.910 に答える