Попробуйте Spring Content .Он обеспечивает простое хранение и поиск «контента», будь то изображения, видео, документы и т. Д.
Добавьте эти зависимости в ваш файл pom.xml:
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-fs</artifactId>
<version>0.0.11</version>
</dependency>
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest</artifactId>
<version>0.0.11</version>
</dependency>
Добавьте @EnableFilesystemStores
и @Import
аннотации к SpringWebConfig
:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages =
{"spring.ahmed.mostafa.data","com.ahmed.mostafa.controllers"})
@EnableFilesystemStores("com.ahmed.mostafa.controllers")
@Import(org.springframework.content.rest.config.RestConfiguration.class)
public class SpringWebConfig implements WebMvcConfigurer {
и к следующим компонентам:
@Bean
File filesystemRoot() {
try {
return new File("/path/to/your/images/outside/webapp");
} catch (IOException ioe) {}
return null;
}
@Bean
FileSystemResourceLoader fileSystemResourceLoader() {
return new
FileSystemResourceLoader(filesystemRoot().getAbsolutePath());
}
Добавьте следующий магазин:
@StoreRestResource(path="profilePics")
public interface ProfilePicStore extends Store<String> {
}
Теперь, когда вы запускаете приложениеу вас будет конечная точка REST, которая позволит вам сохранять и извлекать изображения профиля в /path/to/your/images/outside/webapp
.Предполагается, что ваше веб-приложение работает на localhost:8080
:
curl -X POST -F file=@/path/to/local/pic.jpg http://localhost:8080/<contextPath>/profilePics/profile1.jpg
Или:
<form:form action="${pageContext.request.contextPath}/profilePics/profile1.jpg" method="post" enctype="multipart/form-data">
<input type ="file" name ="file">
<input type ="submit" value ="submit">
</form:form>
сохранит файл в /path/to/your/images/outside/webapp/profile1.jpg
.
И:
curl http://localhost:8080/<contextPath>/profilePics/profile1.jpg
Или:
<img src="${pageContext.request.contextPath}/profilePics/profile1.jpg">
восстановит его снова.Нет необходимости перезагрузки.
Поддерживаются различные магазины;файловая система, дБ, с3, gridfs.Просто замените зависимость spring-content-fs
для одного магазина, который вы хотите использовать.
Spring Content также можно комбинировать с Spring Data, чтобы связать контент с сущностями.Я упоминаю, как будто вы, вероятно, храните пользователей в базе данных.Руководство по началу работы здесь .