Как загрузить Excel с помощью ajax-вызова?

#ajax #spring-mvc

#ajax #spring-mvc

Вопрос:

Я вернул свой файл Excel из spring controllr. но файл не конвертируется.

Контроллер :—

 Workbook wb = services.downloadExcel(id);
response.setHeader("Content-disposition", "attachment; 
filename=test.xls");
wb.write(response.getOutputStream());
response.flushBuffer();
return wb;
  

Ajax :—

 $.ajax({
    type: "GET",
    url: "/screener/"   projectId,
    success: function (result) {
        console.log(result)
        alert("sfa");
        var blob = new Blob([result], { type: 'application/vnd.ms- 
        excel' });
        var downloadUrl = URL.createObjectURL(blob);
        var a = document.createElement("a");
        a.href = downloadUrl;
        a.download = "downloadFile.xls";
        document.body.appendChild(a);
        a.click();
    }
});
  

Ответ №1:

Используемый вами метод будет работать только для обычных текстовых файлов, xls — это не обычный текст, поэтому вам нужно извлечь его в виде двоичных данных.

Если вы используете jQuery 3 , вы можете установить тип ответа запроса в ‘blob’ и использовать этот большой двоичный объект для создания своего URL-адреса большого двоичного объекта для загрузки.

jQuery 3

 $.ajax({
    type: "GET",
    url: "/screener/"   projectId,
    xhrFields:{
        responseType: 'blob'
    },
    success: function (result) {
        console.log(result)
        alert("sfa");
        var blob = resu<
        var downloadUrl = URL.createObjectURL(blob);
        var a = document.createElement("a");
        a.href = downloadUrl;
        a.download = "downloadFile.xls";
        document.body.appendChild(a);
        a.click();
    }
});