Я бы попробовал проект сообщества под названием Spring Content .Это обеспечивает абстракцию над хранилищем для обработки ресурсов.Он внедряет реализацию службы и контроллер для вас, так что вам не нужно писать самостоятельно.
Добавление этого будет выглядеть примерно так:
pom.xml (при условии, что Maven. Также доступны стартеры с пружинной загрузкой)
<!-- Java API -->
<!-- just change this depdendency if you want to store somewhere else -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-fs</artifactId>
<version>0.7.0</version>
</dependency>
<!-- REST API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest</artifactId>
<version>0.7.0</version>
</dependency>
StoreConfig.java
@Configuration
@EnableFilesystemStores
@Import(RestConfiguration.class)
public class StoreConfig {
@Bean
FileSystemResourceLoader fileSystemResourceLoader() throws IOException {
return new FileSystemResourceLoader(new File("/path/to/uploaded/files").getAbsolutePath());
}
}
FileStore.java
@StoreRestResource(path="files")
public interface FileStore extends Store<String> {
}
И все.FileStore - это по сути универсальный Spring ResourceLoader.Зависимость spring-content-fs
заставит Spring Content внедрить реализацию на основе файловой системы.Зависимость spring-content-rest
заставит Spring Content также внедрить реализацию, если @Controller
перенаправляет HTTP-запросы в методы службы FileStore
.
Таким образом, теперь у вас будет полностью функциональная (POST, PUT, GET, DELETE) файловая служба на основе REST в /files
, которая будет использовать ваш FileStore
для извлечения (и сохранения) файлов в /path/to/uploaded/files
на вашем сервере.
Итак:
curl --upload-file some-image.jpg /files/some-image.jpg
загрузит some-image.jpg
и сохранит его в /path/to/uploaded/files
на вашем сервере.
И:
curl /files/some-image.jpg
восстановит его снова.В вашем случае это будет URL, который вы используете в тегах <img/>
.
HTH
Внедренный контроллер также поддерживает потоковую передачу видео, в случае, если это полезно.
При этом вы также можете удалить весь свой контроллер и служебный код, как он естьбольше не требуется.Кроме того, поскольку Spring Content является абстракцией хранилища, в будущем вы также можете перейти на любой другой носитель информации, поддерживаемый Spring Content;S3 например.