На моей стороне сервера, которая построена с использованием Spring Boot Framework, он возвращает поток, который выглядит следующим образом:
public ResponseEntity<StreamingResponseBody> downloadFiles(@RequestBody DownloadRequest payload) {
// Set proper header
String contentDisposition = "attachment;filename=download.zip";
// Build the response stream
StreamingResponseBody stream = outputStream -> {
archiveManagerService.downloadFiles(payload.getArchiveId(), payload.getFiles(), outputStream);
};
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType("application/zip"))
.header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
.body(stream);
}
Он прекрасно работает для меня. Я могу скачать файл с помощью Почтальона. Теперь мне нужно вызвать эту конечную точку со стороны клиента , используя Axios . После некоторых поисков я нашел библиотеку с именем StreamSaver.js . Эта библиотека прекрасно работает с fetch (просмотрите исходный код, чтобы увидеть пример кода). Тем не менее, я не знаю, как использовать его с Axios.
В настоящее время мой код выглядит следующим образом (я использую Vuejs):
import axios from 'axios';
import streamSaver from 'streamsaver';
const instance = axios.create({
baseURL: 'http://141.5.98.232:8080',
headers: {
'Content-Type': 'application/json'
}
});
instance.post('/download', postData, {
responseType: 'stream'
})
.then(response => {
// What should I put here? These lines below don't work
const fileStream = streamSaver.createWriteStream('download.zip');
response.data.pipe(fileStream);
});
Я получил сообщение о том, что
response.data.pipe не является функцией
Итак, как я могу использовать поток со стороны клиента с Axios? Или, может быть, есть лучшее решение?