ajax读取xlsx文件,从Ajax中的服务器响应获取Excel文件(.xlsx)

在尝试通过Ajax从服务器获取并下载.xlsx文件时遇到问题,文件在浏览器中无法正确打开。已设置正确的Content-Type和Content-Disposition头,尝试使用Blob构造函数,但文件仍损坏。服务器端的Java/Spring控制器方法设置无误,问题可能出在Ajax的处理方式上。
摘要由CSDN通过智能技术生成

在获得该文件的响应(成功的ajax方法)后,获取Excel文件并在浏览器中打开下载窗口时出现问题。我已经合适了Content-Type and

Content-Disposition headers,我尝试在js中使用 Blob ,但我无法实现我想要的-简单文件下载。

我完成了几个版本的ajax,下面是其中的一个。我开发了一个ajax,它返回了由于损坏而无法正确打开的excel文件(尽管扩展名为.xlsx)。

也许问题出在Blob构造函数中使用了不合适的数据类型?

我尝试使用成功方法参数中的“ xhr.response”而不是“

data”,但是它也不起作用。我在Chrome的开发人员工具中检查了响应标头,并且它们设置正确。

重要的是-在服务器端创建的所有excel工作簿都是正确的,因为当数据是通过URL发送而不是通过ajax发布时,它可以在以前的版本中工作。

下面是Java / Spring服务器端的控制器方法:

response.reset();

response.setContentType("application/vnd.ms-excel");

response.addHeader("Content-Disposition","attachment;filename=\"" + className + " " + title + ".xlsx\"");

try (ServletOutputStream output = response.getOutputStream()){

workbook.write(output);

output.flush(

要实现从 `qa.xlsx` 文件读取问题和答案,并根据输入的问题回答相应的答案,您需要使用一些 JavaScript 库来读取 Excel 文件。下面是一个示例代码,使用了 `SheetJS` 库来读取 `qa.xlsx` 文件,并根据输入的问题回答相应的答案: ``` <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.9/xlsx.full.min.js"></script> <script> function getResponse(message) { let response = ""; const file = document.querySelector('#file').files[0]; const reader = new FileReader(); reader.onload = function(e) { const data = new Uint8Array(e.target.result); const workbook = XLSX.read(data, {type: 'array'}); const sheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[sheetName]; const range = XLSX.utils.decode_range(worksheet['!ref']); for (let i = range.s.r; i <= range.e.r; i++) { const cell = worksheet[XLSX.utils.encode_cell({r: i, c: 0})]; if (cell && cell.v === message) { response = worksheet[XLSX.utils.encode_cell({r: i, c: 1})].v; break; } } if (!response) { response = "抱歉,我不太明白你的意思,请换个说法。"; } displayResponse(response); }; reader.readAsArrayBuffer(file); } function displayResponse(response) { // 将 response 显示在对话框 } </script> ``` 在这个示例代码,我使用了 `SheetJS` 库来读取 `qa.xlsx` 文件。当用户输入一个问题时,程序会读取 `qa.xlsx` 文件,查找与该问题匹配的答案,并将答案显示在对话框。如果找不到匹配的答案,则程序会回复“抱歉,我不太明白你的意思,请换个说法。”。您需要将 `displayResponse` 函数实现为将 `response` 显示在对话框的代码。注意,在使用这个示例代码之前,您需要将 `qa.xlsx` 文件上传到页面,并添加一个文件上传控件 `#file`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值