1. 問題が発生する
こちらの商品の写真はアップされていますが、表示されていません。
プロジェクトの構造は次のとおりです。
アップロードされたすべての画像は、webapp の次のレベルのサブディレクトリに保存され、フロント エンドでフォーム要素が送信された後にコントロールを介してアップロードされます。画像は既にこのフォルダーにアップロードされていますが、アクセスすることはできません。 、アップロード
部分のコード:
//上传路径保存设置
String path = "/Users/ppsn/Documents/mimissm/MiMi-SSM/src/main/webapp/image_big";
//如果路径不存在,创建一个
File realPath = new File(path);
if (!realPath.exists()){
realPath.mkdir();
}
//通过CommonsMultipartFile的方法直接写入图片
try {
imag.transferTo(new File(realPath +"/"+ uploadFileName));
} catch (IOException e) {
e.printStackTrace();
}
2. 問題分析
フロントエンドがフォームを送信した後、この画像がフォルダーに既に表示されていることがわかりますが、https://local:8080/image_big/1dae510.png にアクセスすると、アクセスできず、404 が表示されます。この時点で、アップロードされた他の画像にアクセスできます , https://local:8080/image_big/3e00b9.png などは通常どおりアクセスできます. この時点で、ターゲットディレクトリの下の対応するフォルダーにはこの画像はありません、target是用来存放项目构建后的文件和目录、jar包、war包、编译的class文件 所有都是Maven构建时生成的。
通常アクセスされる画像はここにあります。
プロジェクトが再起動すると、つまりターゲット ディレクトリが Maven によって再構築されます. このとき、ターゲット ディレクトリを見ると、先ほどアップロードした 1dae510.png という画像がターゲット ディレクトリに表示されていることがわかります。
この時点で、問題はすでに非常に明確ですが、毎回サーバーを再起動することはできません! だから、それを解決する別の方法を見つけてください。
3. 問題解決
仮想パスを指定します。アクセス パスは引き続き https://local:8080/image_big/1dae510.png であり、イメージをビルドするためにターゲット ディレクトリを再起動する必要がありますが、現在のアクセス パスは、仮想パス方式。
実装:
- Tomcat ローカル フォルダに入り、server.xml ファイルを見つけて変更します
path: 仮想パスを表します; つまり、クライアントに返されるアドレスです;
docBase: 絶対パスを表します; ファイル ストレージの物理アドレス;
reloadable=" false": Tomcat を再起動する必要がないことを表し、更新が有効になります
- アイデアでTomcat構成を編集する
4. テストを再開する
サーバーを再起動しなくても、製品を追加した直後に表示されることがわかります.ブラウザーに https://local:8080/image_big/1dae510.png と入力して、通常どおり画像を読み込みます。
ただし、ターゲット ディレクトリ内の画像はまだ変更されていないことに注意してください。
参考元: