SpringBoot統合Baidu Uditorの画像をアップロードした後、直接に404にアクセスするにはどうすればいいですか?
3198 ワード
Spring Bootプロジェクトのアップロード画像は通常リモートサーバにアップロードされて保存されています。開発中に現在のプロジェクトのある静的ディレクトリにアップロードされるかもしれません。この場合、この問題が発生します。ファイルはアップロード後に直接アクセスできません。プロジェクトを再読み込みしなければなりません。
まず原因を分析します。
類似/upload/image/1.jpgというフォーマットで画像のアクセスを行う場合、Spring Bootで読み取られるのは本プロジェクトの直接的な静的ディレクトリではなく、コンパイルを行う際にtargetディレクトリ下のファイルが生成されることを知っています。
問題が来ました。運行中に画像をアップロードすると、現在のプロジェクトを再ロードできません。つまり、targetディレクトリの下のファイルはずっと前のファイルです。Spring Boot熱配置を行ったと言われていますが、プロジェクトを自動的に再ロードすることができます。しかし、問題は熱い展開で、プロジェクトを分析して再ロードする時間が必要ですので、ファイルをアップロードしてから直接に訪問すると、必ず実現できません。
簡単に言えば、ファイルは単にプロジェクトのフォルダにアップロードするだけで、targetディレクトリの下で対応ファイルを生成していないため、アクセスできません。
インターネットでブログを見ましたが、ファイルを現地にコピーする時にプロジェクトのtargetディレクトリにコピーしてもいいと言いました。これで訪問できます。聞いてもいいです。しかし、実際に知っています。もちろん興味のあるものも試してみてもいいです。これは本当です。
解決方法:マッピングパスブロックを構成し、仮想パスを真の画像アドレスにマッピングし、再現の目的(テスト済み、有効)を達成する。
簡単に言えば、UEditorがアクセスするパスをローカルパスにマッピングすることであり、無駄話は多くなく直接コードに入れることである。
注:Spring Boot 1バージョンはextendsです。 WebMvcConfigrer Adapter類、Spring Boot 2バージョンはimplemens WebMvcConfigrerですが、ここはちょっと違います。
設定が終わったら正常に表示されます。
注:SprigBoot多モジュール項目を使用していると、この方法で入手したのは、親プロジェクトの所在地ですので、問題が発生します。この問題を解決する方法は、現在のプロジェクトの起動類を配置する作業環境です。具体的には、特定の項目です。
設定が終わったらこの問題を解決できます。
前にこの問題を話した時も、ある提案をくれました。写真をプロジェクトに置かず、ある固定されたディスクの中に置いてください。このように要求経路に戻る時は直接に地元の住所を要求して、将来サーバーに公開する時はNGIxを使います。
でも、問題は私はNgixに対してあまりよく分かりませんので、Ngixを覚えたら改善してください。まず私の代わりに試してみてもいいですか?
以上が今回紹介したSpringBoot画像アップロード404に関するすべての知識点の内容であり、学習とサポートに感謝しています。
まず原因を分析します。
類似/upload/image/1.jpgというフォーマットで画像のアクセスを行う場合、Spring Bootで読み取られるのは本プロジェクトの直接的な静的ディレクトリではなく、コンパイルを行う際にtargetディレクトリ下のファイルが生成されることを知っています。
問題が来ました。運行中に画像をアップロードすると、現在のプロジェクトを再ロードできません。つまり、targetディレクトリの下のファイルはずっと前のファイルです。Spring Boot熱配置を行ったと言われていますが、プロジェクトを自動的に再ロードすることができます。しかし、問題は熱い展開で、プロジェクトを分析して再ロードする時間が必要ですので、ファイルをアップロードしてから直接に訪問すると、必ず実現できません。
簡単に言えば、ファイルは単にプロジェクトのフォルダにアップロードするだけで、targetディレクトリの下で対応ファイルを生成していないため、アクセスできません。
インターネットでブログを見ましたが、ファイルを現地にコピーする時にプロジェクトのtargetディレクトリにコピーしてもいいと言いました。これで訪問できます。聞いてもいいです。しかし、実際に知っています。もちろん興味のあるものも試してみてもいいです。これは本当です。
解決方法:マッピングパスブロックを構成し、仮想パスを真の画像アドレスにマッピングし、再現の目的(テスト済み、有効)を達成する。
簡単に言えば、UEditorがアクセスするパスをローカルパスにマッピングすることであり、無駄話は多くなく直接コードに入れることである。
注:Spring Boot 1バージョンはextendsです。 WebMvcConfigrer Adapter類、Spring Boot 2バージョンはimplemens WebMvcConfigrerですが、ここはちょっと違います。
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/static/ueditor/**").addResourceLocations("classpath:/static/ueditor/");
registry.addResourceHandler("/public/**").addResourceLocations("classpath:/public/");
registry.addResourceHandler("/static/upload/image/**").addResourceLocations("file:" + UploadUtils.getImgDirFile().getAbsolutePath() + "/"); //
}
UploadUtils.java
public class UploadUtils {
// -- SpringBoot static (SpringBoot )
public final static String IMG_PATH_PREFIX = "static/upload/image";
public static File getImgDirFile(){
// " "
String fileDirPath = new String("src/main/resources/" + IMG_PATH_PREFIX);
File fileDir = new File(fileDirPath);
if(!fileDir.exists()){
//
fileDir.mkdirs();
}
return fileDir;
}
}
ポイントはgetAbsoluutePath()方法であり、この関数は現在のプロジェクトの現在の動作環境における絶対パスを取得する役割を果たしています。例えば、開発過程で得られた結果はD:\WorkSpace\IDEA-Work Spaceです。設定が終わったら正常に表示されます。
注:SprigBoot多モジュール項目を使用していると、この方法で入手したのは、親プロジェクトの所在地ですので、問題が発生します。この問題を解決する方法は、現在のプロジェクトの起動類を配置する作業環境です。具体的には、特定の項目です。
設定が終わったらこの問題を解決できます。
前にこの問題を話した時も、ある提案をくれました。写真をプロジェクトに置かず、ある固定されたディスクの中に置いてください。このように要求経路に戻る時は直接に地元の住所を要求して、将来サーバーに公開する時はNGIxを使います。
でも、問題は私はNgixに対してあまりよく分かりませんので、Ngixを覚えたら改善してください。まず私の代わりに試してみてもいいですか?
以上が今回紹介したSpringBoot画像アップロード404に関するすべての知識点の内容であり、学習とサポートに感謝しています。