Где/Как хранить изображения/файлы в spring mvc

Я работаю в электронном коммерческом приложении в Spring MVC и Hibernate, где мне нужно сохранить несколько изображений.
Я хочу сохранить изображения в файловой системе (на самом сервере, чтобы уменьшить нагрузку на базу данных). Мое сомнение в том, где именно я должен сохранять изображения в моем проекте?

Как я прошел через некоторые блоги, где было упомянуто, что изображения не должны сохраняться в папке с файлом war, так как это может привести к проблемам при выпуске следующей версии приложения (для резервного копирования всех изображений и снова поместите их вручную)
Пожалуйста, дайте мне знать, где именно мне нужно сохранять изображения и как получить этот путь к папке в нашем классе java.

Ответ 1

Вы можете создать контроллер, который будет возвращать данные изображения и использовать его для отображения на вашем jsp.

Пример контроллера:

@RequestMapping(value = "/getImage/{imageId}")
@ResponseBody
public byte[] getImage(@PathVariable long imageId, HttpServletRequest request)  {
String rpath=request.getRealPath("/");
rpath=rpath+"/"+imageId; // whatever path you used for storing the file
Path path = Paths.get(rpath);
byte[] data = Files.readAllBytes(path); 
return data;
}

И используйте приведенный ниже код для отображения:

<img src="/yourAppName/getImage/560705990000.png" alt="myImage"/>

НТН!

Ответ 2

Вы можете хранить/выгружать файлы в контейнере. Используйте request.getRealPath("/") для доступа к пути.

Пример:

                byte[] bytes = fileInput.getBytes(); 

                //bytes to string conversion
                fileToStr = new String(bytes, "UTF-8");
                System.out.println(fileToStr);                    
                String name=fileInput.getOriginalFilename(); 

                String ext=name.substring(name.lastIndexOf("."),name.length()); 
                fileName=""+System.currentTimeMillis()+ext; 


                String rpath=request.getRealPath("/"); //path forstoring the file
                System.out.println(rpath); 
                File file=new File(rpath,"csv"); 
                if(!file.exists()){ 
                                file.mkdirs(); 
                } 

                File temp=new File(file,fileName); 
                System.out.println("Path : "+temp); 

                FileOutputStream fos= new FileOutputStream(temp); 
                fos.write(bytes); 
                fos.close();