Webアプリケーションのすべてのユーザーに対応するフォルダーをサーバー上に作成したいと思います。
Javaを介して動的に新しいフォルダを作成するにはどうすればよいですか?そして、その新しいフォルダに特定のユーザーに対応するリソースを含める必要があります。たとえば、そのリソースのURLを直接提供することで、クライアントとしてこれらのリソースにアクセスできますか。
http://localhost:8080/myapp/newfolder/a.pdf
それは可能ですか?
Webアプリケーションのすべてのユーザーに対応するフォルダーをサーバー上に作成したいと思います。
Javaを介して動的に新しいフォルダを作成するにはどうすればよいですか?そして、その新しいフォルダに特定のユーザーに対応するリソースを含める必要があります。たとえば、そのリソースのURLを直接提供することで、クライアントとしてこれらのリソースにアクセスできますか。
http://localhost:8080/myapp/newfolder/a.pdf
それは可能ですか?
命名スキームが理解されている場合、あるユーザーが別のユーザーのフォルダーにアクセスできるという重大なセキュリティ上の問題になるため、URL を介してフォルダーを直接公開することはしません。
代わりに、私は
java.io.File.mkdir()
. _を読み取る単純なサーブレットを作成servletRequest.getPathInfo()
し、パスからユーザー名を識別し、提供するファイルを指定します。これを行うには、サーブレット クラスと URL パターンを次のように定義する必要があります。
<servlet-mapping>
<servlet-name>read-file</servlet-name>
<url-pattern>/read-file/*</url-pattern>
</servlet-mapping>
a.pdf
userのファイルにアクセスする場合xyz
、URL はhttp://server/read-file/xyz/a.pdf
.
URL にアクセスしているユーザーが、パス情報にあるユーザー名と同じかどうかを確認します。
FileInputStream
たとえば 1MB のブロック単位でファイルを読み取り、およびヘッダーServletOutputStream
に適切な値を設定した後、(その間のどこにも格納せずに) に書き込みます。Content-Type
Content-Disposition
これを確認してください。 Windows および Linux マシンで Java プログラムを使用して新しいフォルダーを作成する
さらに、ディレクトリのパスと対応するユーザーのマッピングを保存できます。
を使用してJavaでディレクトリを作成できますnew File("path"+File.seperator+"foldername").mkdir()
Web アプリの war フォルダー内に作成することを目指していると思います。war を再デプロイするとユーザー データが失われるため、これは推奨される方法ではありません。
より良いアプローチは、システム プロパティを使用してアプリケーションにリポジトリ パスを構成することです。
例: repository=D:\userdata そして、このレポ内にフォルダーを作成します。次に、このファイルのダウンロードを許可するカスタム サーブレットが必要になる場合があります。ファイルを読み取って、サーブレット応答に入れる必要があります。このフォルダーは、war ファイルの再デプロイの影響を受けません。
このアプローチでは複数のアプリケーションサーバーにスケーリングできないため、このアプローチでさえ間違っています。ユーザーデータを中央リポジトリ (Amazon s3、ラックスペースファイル) またはデータベースに保存することを常にお勧めします。