В настоящее время существуют проекты, такие как Spring Content , которые предоставляют очень похожую модель программирования для неструктурированных данных (т.е. файлов, изображений, видео и т. Д.), Как Spring Data для структурированных данных.Кроме того, он позволяет вам связывать эти файлы с вашими сущностями.
Таким образом (если вы используете Spring Boot), вы бы добавили следующие зависимости:
pom.xml
<!-- Java API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-fs-boot-starter</artifactId>
<version>0.4.0</version>
</dependency>
<!-- REST API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest-boot-starter</artifactId>
<version>0.4.0</version>
</dependency>
Добавьте следующие атрибуты в свой объект File, чтобы с ним можно было связать содержимое.
File.java
@Entity
public class File {
...existing fields...
@ContentId
private UUID contentId;
@ContentLength
private long contentLength = 0L;
// if you have rest endpoints
@MimeType
private String mimeType;
...
}
Создатьa ContentStore
(эквивалент вашего FileRepository, но для ваших файлов):
FileContentStore.java
@StoreRestResource(path="fileContents")
public interface FileContentStore extends ContentStore<File, UUID> {
}
При запуске приложения Spring Content увидитИнтерфейс FileContentStore
и зависимость spring-content-fs
и внедрение реализации этого интерфейса для файловой системы.Он также увидит зависимость spring-content-rest
и добавит реализацию @Controller, которая перенаправляет запросы GET, PUT, POST и DELETE REST на FileContentStore
.Это избавляет вас от необходимости писать любой код контроллера, который у вас есть выше.Конечные точки REST будут доступны в /fileContents
, поэтому ...
curl -X POST -F "image=@/path/to/local/file.pdf" /fileContents/{fileId}
загрузит файл file.pdf и свяжет его с вашей файловой сущностью.И:
curl /fileContents/{fileId}
получит его снова.
Эта модель программирования также создает абстракцию над реализацией хранилища файлов, позволяя вам выбрать любой тип хранилища, который поддерживает Spring Content (в настоящее время этоФайловая система, S3, JPA BLOB, Gridfs Монго и Google Storage).Код вашего приложения останется прежним независимо.
HTH