Простой модуль, используемый через API внешними приложениями для централизованного хранения файлов в заданной директории
Sefer - "книга" на древнееврейском
- файлы некоторых форматов, указанных в настройках, архивируются (.zip), остальных форматов - нет
- файлы хранятся без расширения и оригинального имени. Эти параметры хранит внешнее приложение
- при сохранении файлу в качестве имени присваивается UUID, служащий идентификатором файла для внешних приложений
Загрузить файл:
HTTP Method: POST
URL: .../sefer/api/files/upload
Request: MultipartFile, не забывая записать в поле name объекта MultipartFile полное название файла, включающее его расширение (например, "Резюме Торвальдс.pdf"
)
Response:
{
"response": {
"FileInfoDto": {
fileName: <UUID>
}
}
}
Получить файл:
HTTP Method: GET
URL: /api/files/download/{uuid}
Request: UUID
Response: application/octet-stream
Удалить файл:
HTTP Method: DELETE
URL: /api/files/{uuid}
Request: UUID
Response: void
public UUID upload(MultipartFile file) {
String serverUrl = URL + "/upload";
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> parameters = new LinkedMultiValueMap<String, Object>();
parameters.set("Content-Type","multipart/form-data");
parameters.add("file", file.getResource());
final HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(
parameters, requestHeaders);
ResponseEntity<FileInfoDto> response = restTemplate.exchange(serverUrl, HttpMethod.POST, httpEntity, FileInfoDto.class);
if (response.getBody() == null) {
return null;
}
return response.getBody().getFileName();
}
public void download(UUID seferFileName, OutputStream stream) {
String serverUrl = URL + "/download/" + seferFileName;
restTemplate.execute(serverUrl, HttpMethod.GET, null, clientHttpResponse -> {
StreamUtils.copy(clientHttpResponse.getBody(), stream);
return stream;
});
}
public void delete(UUID seferFileName) {
String serverUrl = URL + "/" + seferFileName;
restTemplate.delete(serverUrl);
}
Этот проект лицензируется в соответствии с лицензией Apache 2.0
Подробности в файле LICENSE
Сергей Козырев
Telegram @taksebe
Java™ SE Development Kit 11.0.5
Git - управление версиями
GitHub - репозиторий
Apache Maven - сборка, управление зависимостями
JUnit 5 - тестирование
Полный список зависимостей и используемые версии компонентов можно найти в pom.xml
git clone https://github.com/taksebe-official/seferStorage
mvn clean install
java -jar target/sefer.jar
Владу, который продолжает возиться со мной, неразумным