Где/Как хранить изображения/файлы в 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();