アップロードしたファイルをサーブレットアプリケーションに保存するための推奨される方法

Mr_and_Mrs_D

私はここで、ファイルは移植性がなく、トランザクションであり、外部パラメーターを必要とするため、サーバーにファイルを保存するべきではないことを読みました。ただし、Tomcat(7)のtmpソリューションが必要であり、知りたいサーバーマシンを(相対的に)制御できることを考えると、次のようになります。

  • ファイルを保存するのに最適な場所はどこですか?保存する必要がありますか/WEB-INF/uploadsここではお勧めしません)、または下のどこかに保存する必要があります$CATALINA_BASEここを参照)または...?JavaEE 6チュートリアルは、ユーザー(:wtf :)からパスを取得します注意:ファイルは決してダウンロード可能であってはなりません。

  • ここで詳しく説明するように構成パラメーターを設定する必要がありますか?いくつかのコードをいただければ幸いです(相対パスを指定したいので、少なくともTomcatに移植可能です)-Part.write()有望に見えますが、どうやら絶対パスが必要です

  • このアプローチとデータベース/ JCRリポジトリのデメリットの説明に興味があります。

残念ながら、@ BalusCによるFileServletはファイルのダウンロードに集中していますが、ファイルのアップロードに関する彼の回答は、ファイルの保存場所に関する部分をスキップしています。

DBまたはJCR実装(jackrabbitなどを使用するように簡単に変換できるソリューションが望ましいでしょう。

BalusC

アップロードされたイメージの回答に記載されている理由により、ページを更新した後にのみ利用できるため、IDEのプロジェクトフォルダー(サーバーのデプロイフォルダー)を除く、アクセス可能な場所に保存します

  1. IDEのプロジェクトフォルダでの変更は、サーバーの作業フォルダにすぐには反映されません。IDEには、サーバーの作業フォルダーが最後の更新と同期されるようにする一種のバックグラウンドジョブがあります(これは、「公開」と呼ばれるIDE用語です)。これが、発生している問題の主な原因です。

  2. 実際のコードでは、アップロードされたファイルをwebappのデプロイフォルダーに保存してもまったく機能しない場合があります。一部のサーバーは(デフォルトまたは構成によって)デプロイされたWARファイルをローカルディスクファイルシステムに展開せず、代わりに完全にメモリに展開します。基本的にデプロイされたWARファイルを編集して再デプロイしない限り、メモリ内に新しいファイルを作成することはできません。

  3. サーバーがデプロイされたWARファイルをローカルディスクファイルシステムに展開した場合でも、新しく作成されたファイルはすべて、元のWARファイルの一部ではないため、再デプロイまたは単純な再起動で失われます。

メソッドを使用ないgetRealPath()限り、ローカルディスクファイルシステムのどこに保存されるかは、私や他の誰にとっても重要ではありませその方法を使用することは、いずれにせよ憂慮すべきことです。

保管場所へのパスは、さまざまな方法で定義できます。あなたはそれをすべて自分でしなければなりませんおそらくこれは、サーバーがすべて自動的にそれを行うことをどういうわけか期待していたために、混乱が引き起こされる場所です。最終的なアップロード先指定され@MultipartConfig(location)いませが、ケースファイルサイズの一時保存場所がメモリストレージのしきい値を超えていることに注意しください

したがって、最終的な保管場所へのパスは、次のいずれかの方法で定義できます。

  • ハードコード:

      File uploads = new File("/path/to/uploads");
    
  • 経由の環境変数SET UPLOAD_LOCATION=/path/to/uploads

      File uploads = new File(System.getenv("UPLOAD_LOCATION"));
    
  • サーバー起動時のVM引数-Dupload.location="/path/to/uploads"

      File uploads = new File(System.getProperty("upload.location"));
    
  • *.properties次のようなファイルエントリupload.location=/path/to/uploads

      File uploads = new File(properties.getProperty("upload.location"));
    
  • web.xml <context-param>名前upload.locationと値で/path/to/uploads

      File uploads = new File(getServletContext().getInitParameter("upload.location"));
    
  • 存在する場合は、サーバーが提供する場所を使用します(JBoss AS / WildFlyなど)

      File uploads = new File(System.getProperty("jboss.server.data.dir"), "uploads");
    

どちらの方法でも、次のようにファイルを簡単に参照して保存できます。

File file = new File(uploads, "somefilename.ext");

try (InputStream input = part.getInputStream()) {
    Files.copy(input, file.toPath());
}

または、一意のファイル名を自動生成して、ユーザーが偶然に同じ名前の既存のファイルを上書きしないようにする場合:

File file = File.createTempFile("somefilename-", ".ext", uploads);

try (InputStream input = part.getInputStream()) {
    Files.copy(input, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
}

partJSP /サーブレットで取得する方法は、JSP /サーブレットを使用してサーバーにファイルをアップロードする方法で回答されていますか?partJSFで取得する方法は、JSF 2.2 <h:inputFile>を使用してファイルをアップロードする方法で回答されていますか?保存されたファイルはどこにありますか?

注:で定義された一時保管場所を基準にしたパスを解釈するため、使用ないでくださいPart#write()@MultipartConfig(location)

参照:

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

生成されたファイルをサーブレットベースのWebアプリケーションに一時的に保存する方法

分類Dev

WebアプリケーションでEJBとサーブレットを使用するための推奨される方法は何ですか?

分類Dev

アップロードしたファイルをWebアプリケーションに保存する場所

分類Dev

サブドメインアップロードフォームからメインドメインのディレクトリにアップロードされたファイルを保存する方法

分類Dev

再インストールまたはアップグレードのためにアプリケーションを保存する方法は?

分類Dev

再インストールまたはアップグレードのためにアプリケーションを保存する方法は?

分類Dev

WPFアプリケーションの出力ディレクトリに保存されているファイルダイアログを介してアップロードされた画像ファイルを使用するにはどうすればよいですか?

分類Dev

アップロードしたファイルをMVCアプリケーションのアプリケーションフォルダー以外の場所に保存するにはどうすればよいですか?

分類Dev

サービスファブリック内のアクターをバックアップするための推奨される方法

分類Dev

Carrierwave、Fog、Railsアプリケーションのローカルストレージを使用してアップロードされたファイルを表示するにはどうすればよいですか?

分類Dev

アップロードしたファイルをサーバーマシンに一時的に保存する方法

分類Dev

ブラウザでのJavaプラグインのサポートは非推奨になります。アプレットがクライアントファイルシステムにアクセスするための代替ソリューションはありますか?

分類Dev

ユーザーがアップロードしたイベントを保存するための配列またはサブコレクション

分類Dev

apt以外のアプリケーションをインストールするための推奨される場所はどこですか?

分類Dev

サーバー側アプリケーションから生成された署名付きURLを使用して、AndroidからS3サーバーにファイル(ビデオファイル)をアップロードする

分類Dev

ダウンロードしたファイル(オーディオ、ドキュメント)をmac os xサンドボックスアプリケーションのユーザーのダウンロードフォルダーに自動的に保存するにはどうすればよいですか?

分類Dev

Mac OS Xのアプリケーションバイナリファイルにドラッグアンドドロップされたファイルのリストを取得するにはどうすればよいですか?

分類Dev

Bunyanを大規模ノードアプリケーションに適用するための推奨される方法は?

分類Dev

Laravelのストレージファサードでアップロードされた複数のファイルを保存する方法

分類Dev

トラフィックの多いサイトでPHPセッションオブジェクトを使用するための推奨されるアプローチは何ですか?

分類Dev

パペッティアのスクリーンショットから画像データを保存するための推奨される方法は何ですか?

分類Dev

JavaサーブレットWebアプリケーションからDropboxにファイルをアップロードします

分類Dev

JavaサーブレットWebアプリケーションからDropboxにファイルをアップロードします

分類Dev

PowerShellのWinSCP.NETアセンブリを使用してFTPサーバーにアップロードされたファイルを監視する

分類Dev

PowerShellのWinSCP.NETアセンブリを使用してFTPサーバーにアップロードされたファイルを監視する

分類Dev

指定されたパス形式は、ファイルをftpにアップロードする際のC#Windowsアプリケーションではサポートされていません

分類Dev

GridFSコレクション:アップロードされたすべてのファイルの合計サイズを取得する方法は?

分類Dev

warパッケージをビルドした後にJavaアプリケーションでプロパティファイルを追加/編集する方法

分類Dev

POSTを使用してFlaskアプリケーションにファイルをアップロードするときの308リダイレクト

Related 関連記事

  1. 1

    生成されたファイルをサーブレットベースのWebアプリケーションに一時的に保存する方法

  2. 2

    WebアプリケーションでEJBとサーブレットを使用するための推奨される方法は何ですか?

  3. 3

    アップロードしたファイルをWebアプリケーションに保存する場所

  4. 4

    サブドメインアップロードフォームからメインドメインのディレクトリにアップロードされたファイルを保存する方法

  5. 5

    再インストールまたはアップグレードのためにアプリケーションを保存する方法は?

  6. 6

    再インストールまたはアップグレードのためにアプリケーションを保存する方法は?

  7. 7

    WPFアプリケーションの出力ディレクトリに保存されているファイルダイアログを介してアップロードされた画像ファイルを使用するにはどうすればよいですか?

  8. 8

    アップロードしたファイルをMVCアプリケーションのアプリケーションフォルダー以外の場所に保存するにはどうすればよいですか?

  9. 9

    サービスファブリック内のアクターをバックアップするための推奨される方法

  10. 10

    Carrierwave、Fog、Railsアプリケーションのローカルストレージを使用してアップロードされたファイルを表示するにはどうすればよいですか?

  11. 11

    アップロードしたファイルをサーバーマシンに一時的に保存する方法

  12. 12

    ブラウザでのJavaプラグインのサポートは非推奨になります。アプレットがクライアントファイルシステムにアクセスするための代替ソリューションはありますか?

  13. 13

    ユーザーがアップロードしたイベントを保存するための配列またはサブコレクション

  14. 14

    apt以外のアプリケーションをインストールするための推奨される場所はどこですか?

  15. 15

    サーバー側アプリケーションから生成された署名付きURLを使用して、AndroidからS3サーバーにファイル(ビデオファイル)をアップロードする

  16. 16

    ダウンロードしたファイル(オーディオ、ドキュメント)をmac os xサンドボックスアプリケーションのユーザーのダウンロードフォルダーに自動的に保存するにはどうすればよいですか?

  17. 17

    Mac OS Xのアプリケーションバイナリファイルにドラッグアンドドロップされたファイルのリストを取得するにはどうすればよいですか?

  18. 18

    Bunyanを大規模ノードアプリケーションに適用するための推奨される方法は?

  19. 19

    Laravelのストレージファサードでアップロードされた複数のファイルを保存する方法

  20. 20

    トラフィックの多いサイトでPHPセッションオブジェクトを使用するための推奨されるアプローチは何ですか?

  21. 21

    パペッティアのスクリーンショットから画像データを保存するための推奨される方法は何ですか?

  22. 22

    JavaサーブレットWebアプリケーションからDropboxにファイルをアップロードします

  23. 23

    JavaサーブレットWebアプリケーションからDropboxにファイルをアップロードします

  24. 24

    PowerShellのWinSCP.NETアセンブリを使用してFTPサーバーにアップロードされたファイルを監視する

  25. 25

    PowerShellのWinSCP.NETアセンブリを使用してFTPサーバーにアップロードされたファイルを監視する

  26. 26

    指定されたパス形式は、ファイルをftpにアップロードする際のC#Windowsアプリケーションではサポートされていません

  27. 27

    GridFSコレクション:アップロードされたすべてのファイルの合計サイズを取得する方法は?

  28. 28

    warパッケージをビルドした後にJavaアプリケーションでプロパティファイルを追加/編集する方法

  29. 29

    POSTを使用してFlaskアプリケーションにファイルをアップロードするときの308リダイレクト

ホットタグ

アーカイブ