Tomcat を再デプロイした後にイメージやその他のリソースが自動的に削除される問題を解決します

Tomcat を再デプロイした後にイメージやその他のリソースが自動的に削除される問題を解決します

昨日は写真をアップロードしてリンクを返す機能を実装していました。プロジェクトが Tomcat に再デプロイされると、以前にアップロードされた画像やその他のリソースの一部が自動的に削除されました。

理由は、画像をターゲット ディレクトリに保存したためです。その下に置くだけで、Web リンクを通じて簡単に画像を取得できるためです。
たとえば、アップロード後、次のパスが返されます: http://localhost:8080/upload/images/timg.jpg

ただし、プロジェクトが再デプロイされると、ターゲットが再構築され、ターゲット内のリソースは削除されます。
(ターゲットは、プロジェクトのビルド後にファイルとディレクトリ、jar パッケージ、war パッケージ、およびコンパイルされたクラス ファイルを保存するために使用されます。)

最終的に、同じイメージを 2 つのパスに保存する方法を考えました。1 つのパスはターゲットの下にあり、もう 1 つのパスは開発したプロジェクトの下にあります。このようにすると、再デプロイすると、自分のプロジェクト内のファイルがターゲット ファイルを上書きし、ターゲットに再ロードされます。

以下は私の実装コードです

// ローカル IDEA プロジェクト内のパスへ String localDirString = "E:/zideapro/onlineschool/src/main/webapp/upload/images";
//Tomcat サーバーにデプロイされたプロジェクト パス String root_String = request.getSession().getServletContext().getRealPath("/upload/images");

ファイル localDirPath = new File(localDirString);
ファイル root_Path = new File(root_String);
// ローカル IDEA にディレクトリが存在しない場合は、作成する必要があります if (!localDirPath.exists()) {
  ローカルディレクトリパス。
}
// サーバーTomcatにディレクトリが存在しない場合は作成します。if (!root_Path.exists()) {
  root_Path.mkdirs();
}
//ローカル ファイル パスFile localFilePath = new File(localDirPath + File.separator + attachment.getOriginalFilename());//ファイル ディレクトリ + ファイル名//サーバー内のファイルのパスFile root_FilePath = new File(root_Path + File.separator + attachment.getOriginalFilename());//プロジェクト デプロイメント ディレクトリ + ファイル名//イメージをローカルに保存attach.transferTo(localFilePath);
// ローカル パスから Tomcat サーバーにファイルをコピーします // 再デプロイメント中にイメージ リソースが失われないようにします Files.copy(localFilePath.toPath(), root_FilePath.toPath());

System.out.println("editormd は画像をローカル ストレージ パスにアップロードします: " + localFilePath);
System.out.println("editormd はイメージをデプロイメント プロジェクト パスにアップロードします: " + root_FilePath);

出力セクション:
editormd がローカルに保存するために写真をアップロードするパスは次のとおりです: E:\zideapro\onlineschool\src\main\webapp\upload\images\timg2.jpg
editormd がデプロイメント プロジェクトにイメージをアップロードするパス: E:\zideapro\onlineschool\target\ssm\upload\images\timg2.jpg

このように、画像リソースは 2 つのパスにアップロードされます。プロジェクトを再デプロイすると、失われたファイルがローカル ファイルで上書きされるため、画像などのリソースが失われることはありません。

Tomcat の再デプロイ後に画像やその他のリソースが自動的に削除される問題を解決する方法についての記事はこれで終わりです。Tomcat の再デプロイとリソースが自動的に削除される詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Maven プロジェクトを war パッケージにパッケージ化して Tomcat にデプロイする方法
  • IDEA で JavaWeb プロジェクトを Tomcat サーバーにデプロイする方法
  • Vue プロジェクトの webpack をパッケージ化して Tomcat にデプロイし、更新すると発生する 404 エラーの問題の解決策
  • Webプロジェクトがwarパッケージにパッケージ化され、Tomcatがデプロイされると、startup.batが実行され、デプロイメントが直接失敗します。簡単な解決策
  • Spring Boot プロジェクトを Tomcat コンテナにデプロイする方法
  • jsp-ファイルのアップロード後にTomcatを再起動すると自動的にファイルが削除される問題を解決します

<<:  HTML フォームを送信するいくつかの方法_PowerNode Java Academy

>>:  Vue は Websocket カスタマー サービス チャット機能を実装します

推薦する

...

MySQL 8.0.19 winx64 インストールチュートリアルと Windows 10 での初期パスワードの変更

この記事では、参考までにMySQL 8.0.19 winx64のインストールチュートリアルを紹介しま...

Linux システムで httpd の自動インストールと構成を Ansible で実装する方法

1. Ansibleのプレイブックを使用してhttpdを自動的にインストールする1) まず、Ansi...

ネイティブ JavaScript を使用して計算機のサンプル コードを開発する

計算機の主な機能は数値計算を実行することです。計算機機能の Web インスタンスを開発すると、js ...

ウェブページの HTML コード: スクロールテキストの作成

このセクションでは、Web ページ内のテキストをスクロールしたり、スクロール プロパティを制御できる...

MySQL 8.0.16 圧縮版のダウンロードと Win10 システムへのインストール チュートリアル

公式サイトからダウンロード: https://www.mysql.com MySQLの公式サイトにア...

Windows に Docker と docker-compose スイートをインストールするための詳細なチュートリアル

目次導入ダウンロードしてインストールする設定docker-composeをインストールする導入Doc...

複数のフィールドを変更するためのMysql更新の構文の詳細な分析

MySQL でレコードを更新すると、構文は正しいのですが、レコードが更新されません...質問文実行前...

MySQLクエリのパフォーマンスに影響を与える大きなオフセットの理由と最適化の詳細な説明

序文MySQL クエリは select コマンドを使用し、limit および offset パラメー...

Vueはログインタイプの切り替えを実装します

この記事では、ログインタイプの切り替えを実装するためのVueの具体的なコードを例として紹介します。具...

MySQLのレプリケーションの詳細な分析

1.MySQLレプリケーションの概念これは、プライマリ データベースの DDL および DML 操作...

autoconfを使用してMakefileを生成し、プロジェクトをコンパイルする手順

序文Linux では、コンパイルとリンクには Makefile を使用する必要がありますが、適切な ...

VMware Workstation 14 Pro のインストールとアクティベーションのグラフィック チュートリアル

この記事では、VMware Workstation 14 Proのインストールとアクティベーションに...

VMware Workstation 14 Pro に Win10 システムをインストールする

この記事では、VMware Workstation 14 Proにシステムをインストールする方法を紹...

Dockerボリューム権限管理の詳細な説明

ボリュームデータボリュームは Docker の重要な概念です。データ ボリュームは、1 つ以上のコン...