Как скачать файл с Web-Api по Get запросу на vue js через axios
Есть API которое по Get запросу позволяет скачать xls файл. У файла уже есть свое имя и его нужно использовать. Задача скачать этот файл, с веб-страницы по кнопке. Так чтобы закачка была в том же окне, при этом на экране у пользователя не должна открываться другая страница. Файл просто должен упасть в закачку, как это обычно бывает. Написал запрос, но не получается, преобразовать ответ в файл.
код сервера .Net Core Web-Api Controller
[HttpGet]
[Route("DownloadExcel")]
public async Task<FileContentResult> GetExcel()
{
var stream = await _service.GetExcel();
var file = File(
fileContents: stream.ToArray(),
contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
fileDownloadName: "остатки.xlsx"
);
stream.Close();
return file;
}
Код который нужно написать на клиенте
downloadExcel() {
this.isLoading = true
this.$http.get('/api/restsUpload/DownloadExcel', {
headers: {
Accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
},
})
.then((reponse) => {
// скачать файл
})
}
Ответы (2 шт):
Автор решения: Andrew
→ Ссылка
Я делал вот таким образом
.then(({ data }) => {
const link = document.createElement('a');
link.href = URL.createObjectURL(data);
link.download = filename;
link.click();
})
Автор решения: Vasiliy
→ Ссылка
Решил таким образом, хотя хотелось бы покрасивее.
downloadExcel() {
window.open('/api/restsUpload/DownloadExcel')
}