ローカルMVCプロジェクトのイメージマネージャシステムで、ローカルイメージフォルダに保存されているすべてのイメージのギャラリーを表示し、イメージを削除したり、新しいイメージをアップロードしたりする基本機能を使用しています。Spring MVCリソースがリフレッシュされない
新しい画像がアップロードされると、ページは、追加されたばかりの画像を含む画像ギャラリーを再読み込みします。実際には、新しいイメージはHDに正しく保存されますが、Javaプロジェクトのresources/imgフォルダには自動的に表示されません。したがって、一旦ページが再ロードされると、新しいイメージはそこにありません。プロジェクトを手動で更新するときのみ、新しいイメージがresources/imgフォルダに表示されます。
奇妙なことに、私はdeleteメソッドと同じ問題はありません。イメージが削除されると、それはHDとresources/imgフォルダから消え、ページはイメージを表示せずにギャラリーをリロードしますただ削除されました。
問題の可能性はありますか?ここで
は私のコントローラである
@Controller
public class imagesManagerController {
// READ ALL FILES FROM IMG FOLDER
@RequestMapping(value = "/imagesManager", method = RequestMethod.GET)
public ModelAndView readImages
(@RequestParam(value = "error", required = false) String error) {
// create model and link it to jsp imagesManager
ModelAndView model = new ModelAndView("imagesManager");
// return content from images folder and add it to model
File imgsPath = new File("C:/Users/Alessandro/workspace/SpringMVCBlog/WebContent/resources/img");
String[] imgsNames = imgsPath.list();
model.addObject("imgsNames", imgsNames);
//if upload fails, display error message
if (error != null) {
model.addObject("error",
"Please select a file to upload");
}
return model;
}
//UPLOAD FILE TO HD
@RequestMapping(value = "/imagesManager/upload", method = RequestMethod.POST)
public String handleFileUpload (@RequestParam("file") MultipartFile file) {
//get img name
String imgName = file.getOriginalFilename();
System.out.println(imgName);
//create file path
String folder = "C:/Users/Alessandro/workspace/SpringMVCBlog/WebContent/resources/img/";
File path = new File (folder+imgName);
System.out.println(path);
if (!file.isEmpty()) {
try {
//get bytes array from file
byte[] bytes = file.getBytes();
//create output stream
BufferedOutputStream stream = new BufferedOutputStream(
new FileOutputStream(path));
//write img content on path
stream.write(bytes);
//close stream
stream.close();
//if upload is successful, reload page
return "redirect:/imagesManager";
} catch (Exception e) {
return "You failed to upload " + imgName + " => " + e.getMessage();
}
} else {
return "redirect:/imagesManager?error";
}
}
// DELETE FILE FROM HD
@RequestMapping(value = "/imagesManager/delete", method = RequestMethod.POST)
public String deleteFile(@RequestParam (value="imgName") String imgName) {
//create file path to be deleted
String folder = "C:/Users/Alessandro/workspace/SpringMVCBlog/WebContent/resources/img/";
File path = new File (folder+imgName);
// delete file
if (path.delete()) {
//if delete is successful, reload page
return "redirect:/imagesManager";
} else {
return "Delete operation failed";
}
}
}
アップロードしたファイルをローカルディスクに保存します。つまり、C:\ Users \ Public \ PicturesなどのIDEプロジェクトフォルダに保存しないでください。 –
修正。運用環境では、クラウドまたは専用のファイルサーバーを使用する必要があります。 –
OKですが、IDEプロジェクトフォルダにファイルを保存しないと、コントローラでどのように読み込むことができますか?私はローカルディスクにファイルをjpgとして保存したいのですが、DBや外部サーバー/クラウドには保存しないでください。 –