ASP.NET でユーザーをそれぞれのフォルダーに接続するにはどうすればよいですか?
-
02-07-2019 - |
質問
ユーザー A がファイルをアップロードすると、そのファイルはフォルダー A にアップロードされ、ユーザー B がアップロードした場合はフォルダー B にアップロードされます。ASP.NET のロール/プロファイル。フォルダーは事前に存在します。誰でも?
解決
おそらくそれを手動でコーディングしたくなるでしょう。ASP.NET には、ユーザー ファイルを管理するための本質的な機能はありません。ただし、これを行うコードは比較的簡単であるはずです。ユーザー名が一意で変更されないと仮定すると、ユーザー名をパスと組み合わせて (Path.Combine を使用)、その場所にアップロードできます。また、その場所をロックして、他の人がアクセスできないようにします。
他のヒント
私が過去に行った方法は、基本アップロード フォルダー (たとえば、uploads) を使用し、そのフォルダー内に DB からのユーザー ID を使用してフォルダーを作成することでした。したがって、ユーザー ID が 145 のユーザーの構造は ..\uploads\145 になります。
私のコードが最初に行うことは、フォルダーが存在するかどうかを確認し、存在しない場合は、アップロードする前に Directory.Create() (またはその他の構文) を呼び出してフォルダーを作成することです。
さらに役立つ情報:また、同じ名前の 2 つのファイルをアップロードした場合に名前の競合を避けるために、GUID を使用してファイルの名前を変更します。欠点は、通常、元のファイル名と物理 (GUID) ファイル名を含むテーブルを維持する必要があることです。
フォルダーの存在を確認し、存在しない場合はユーザーのためにフォルダーを作成することもできますが、これにはセキュリティ上の影響があります。データをデータベースに保存してユーザーに関連付けることもできます。これは、ユーザーに何をアップロードさせているかによると思います。
これを行うにはいくつかの方法があります。
フォーム認証の使用
フォーム認証を使用する場合は、ユーザーのユーザー名または ID が、ユーザーがファイルをアップロードできるサーバー内のパスの基礎として機能する規則を設定できます。ユーザーはそのフォルダーに直接アクセスできないことに注意してください。ユーザーは Web アプリケーション経由でサーバーからファイルをダウンロードすることもできる必要があります。
Windows 認証の使用
Windows (ActiveDirectory など) 認証を使用する場合、フォルダーの物理的な場所と Web アプリケーション経由の両方へのユーザー アクセスを提供できます。
追伸- マーロン、ここでお会いできて嬉しいです!