Другой вариант - использовать Spring Content .У этого есть несколько преимуществ перед другими решениями;он предоставляет реализации контроллеров и сервисов, поэтому вам не нужно реализовывать их самостоятельно.Предоставляет абстракцию над хранилищем, позволяя вам реорганизовать ваше решение без изменения кода.Например, вы можете перенести свое решение в облако и использовать что-то вроде S3 в качестве хранилища.Он может быть в паре с другими проектами Spring Data (для сбора дополнительных метаданных о вашем контенте) и Apache Solr (для поиска внутри документов), что в целом даст вам более богатое приложение.
Это довольно легкодобавить в ваше приложение.
pom.xml
<!-- 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.6.0</version>
</dependency>
<!-- REST API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest</artifactId>
<version>0.6.0</version>
</dependency>
StoreConfig.java
@Configuration
// just change this annotation if you want to store somewhere else
@EnableFilesystemStores
@Import(RestConfiguration.class)
public class EnableFilesystemStoresConfig {
@Bean
File filesystemRoot() {
try {
return new File("/path/to/your/files");
} catch (IOException ioe) {}
return null;
}
@Bean
FileSystemResourceLoader fileSystemResourceLoader() {
return new FileSystemResourceLoader(filesystemRoot().getAbsolutePath());
}
}
NB: иеще проще, если вы используете Spring Boot.
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/your/files
на вашем сервере.
Итак:
GET /files/some/file.csv
загрузит file.csv
из /path/to/your/files/some/
.
И ...
curl --upload-file some-other-file.csv /files/some-other-file.csv
загрузит some-other-file.csv
и сохранит его в /path/to/your/files/
на вашем сервере.
HTH