そのため、ユーザーが画像をアップロードできるHTMLフォームがあります。これは私のアクションに投稿され、画像はユーザーのIDに固有のディレクトリに配置されます(まだ存在しない場合はそのディレクトリを作成します)。
これは、約2か月前に実装してから問題なく機能しており、それ以降は触れる必要がありません。当初UnauthorizedAccessExceptions
、私はアップロードディレクトリのセキュリティ設定に移動し、「Everyone」にフルコントロールを付与することでそれを解決していました。
突然、画像を保存できなくなりました。UnauthorizedAccessExceptions
フォルダのセキュリティ設定を何度も変更して修正しようとしたにもかかわらず、私は再び取得し始めました。最後に、ASP.netでアカウントのなりすましを行う方法についてお読みください。
だから、今私は取得しておらず、UnauthorizedAccessExceptions
代わりにディレクトリがすでに存在していると思って私のサイトの問題に遭遇しています。
これが私のフォームアクションのスニペットです。
if (Directory.Exists(Path.GetDirectoryName(Server.MapPath("../uploads/" + currentUser.UserId))) == false)
{
Directory.CreateDirectory(Path.GetDirectoryName("../uploads/" + currentUser.UserId));
}
if (Directory.Exists(Path.GetDirectoryName(Server.MapPath("../uploads/" + currentUser.UserId + "/" + newEntry.EntryId))) == false)
{
Directory.CreateDirectory(Path.GetDirectoryName("../uploads/" + currentUser.UserId + "/" + newEntry.EntryId));
}
ImageFile.SaveAs(Server.MapPath("../" + savedFileName));
ifステートメント内のコードは実行されません。だから、私はそれらを削除して、単に試しました:
Directory.CreateDirectory(Path.GetDirectoryName("../uploads/" + currentUser.UserId));
何も起こりません!次に、画像を保存するときに、ディレクトリが存在しないために例外がスローされます。Directory.Exists()
なぜ戻ってくるtrue
のか、なぜDirectory.CreateDirectory()
まったく何もしていないのか、誰か教えてもらえますか?
または、なぜこのコードは何ヶ月も手つかずで正常に機能していて、突然フィットをスローすることにしたのですか?
注:フォルダに移動してディレクトリを手動で作成すると、ファイルは問題なく保存されます