Spring Boot Async передает некоторые данные на сервер, ожидает ответа в виде файла - PullRequest
0 голосов
/ 06 июня 2019

Я использую Spring Boot 2 с io и nio для создания асинхронного вызова на сервер, который затем возвращает файл. Для этой установки я создал простой сервер, который принимает html-ввод и затем возвращает pdf.

Моя проблема заключается в передаче данных, в данном примере простого HTML, на сервер, который генерирует вывод в формате PDF. Как лучше всего создать POST-запрос с помощью Spring Boot? Должен ли я использовать POST для этого в первую очередь?

Приведенный ниже код работает для получения и передачи PDF-файла с сервера.

Что он делает:

  1. Создать входной поток, который будет получать данные
  2. Создать выходной поток, который будет записывать в временный файл
  3. Открыть соединение и перейти к временному файлу, пока это не будет сделано

Код:

@Async
private File getPdf(String html) {
    BufferedInputStream inputStream = null;
    OutputStream outputStream = null;
    File pdf = null;
    byte data[] = new byte[1024];
    int byteContent;        
    try {
        URL url = new URL("http://localhost:3000/html2pdf");
        inputStream = new BufferedInputStream(url.openStream());
        File directory = new File(System.getProperty("java.io.tmpdir"));
        pdf = File.createTempFile("test", ".pdf", directory);           
        outputStream = Files.newOutputStream(Paths.get(pdf.getPath()));
        while ((byteContent = inputStream.read(data, 0, 1024)) != -1) {
            outputStream.write(data, 0, byteContent);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (outputStream != null) {
                outputStream.flush();
                outputStream.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return pdf;
}

Любые другие идеи о том, как сделать этот код лучше, тоже приветствуются!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...