Skip to content

Latest commit

 

History

History
142 lines (93 loc) · 4.13 KB

README.md

File metadata and controls

142 lines (93 loc) · 4.13 KB

Sefer

Простой модуль, используемый через API внешними приложениями для централизованного хранения файлов в заданной директории

Sefer - "книга" на древнееврейском

Особенности:

  • файлы некоторых форматов, указанных в настройках, архивируются (.zip), остальных форматов - нет
  • файлы хранятся без расширения и оригинального имени. Эти параметры хранит внешнее приложение
  • при сохранении файлу в качестве имени присваивается UUID, служащий идентификатором файла для внешних приложений

API

Загрузить файл:

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

Отдельное спасибо

Владу, который продолжает возиться со мной, неразумным