Я использую Spring Boot 2 с io
и nio
для создания асинхронного вызова на сервер, который затем возвращает файл. Для этой установки я создал простой сервер, который принимает html-ввод и затем возвращает pdf.
Моя проблема заключается в передаче данных, в данном примере простого HTML, на сервер, который генерирует вывод в формате PDF. Как лучше всего создать POST-запрос с помощью Spring Boot? Должен ли я использовать POST для этого в первую очередь?
Приведенный ниже код работает для получения и передачи PDF-файла с сервера.
Что он делает:
- Создать входной поток, который будет получать данные
- Создать выходной поток, который будет записывать в временный файл
- Открыть соединение и перейти к временному файлу, пока это не будет сделано
Код:
@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;
}
Любые другие идеи о том, как сделать этот код лучше, тоже приветствуются!