前端发送ajax【get/post】请求,后端生成excel文件,最后用response输出文件流,没有报错也没有文件下载提示。
最后网上搜索了一波,遇到过这个问题的还是不少,问题出在ajax本身,解决方法和原因也都找到。
ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件。
1)使用window.location.href=dataUrl;就可以实现。
当使用window.loaction.href=dataUrl后,点击“导出操作日志”时,文件下载页面也跳转到了datatUrl的地址,使用了history.go(-1)加载历史列表里的上一页解决跳转问题,后来想起用a标签做的按钮,使用href=“javascript:void(0);”便可。
href=“javascript:void(0);”意为执行一个js的空方法,这样就执行了链接,页面不动。
2)使用隐藏iframe实现无刷新下载文件
<a href="#" οnclick="downloadFile()">download</a>
<iframe id="ifile" style=""></iframe>
function downloadFile(){
var dom=document.getElementById('ifile');
dom.src="http:xxxx.com";
}
隐藏iframe,设置src下载地址,点击事件触发事件函数实现下载。
最近要给后台添加操作日志导出的功能,后台已经生成.xls文件,本来想只要ajax请求下就完事儿,想象总是美好的,可不管我怎么ajax,想了各种可能原因也无法解决。问题描述前端发送ajax【get/post】请求,后端生成excel文件,最后用response输出文件流,没有报错也没有文件下载提示。最后网上搜索了一波,遇到过这个问题的还是不少,问题出在ajax本身,解决方法和原因也都找到。原因aja...
最近使用poi
导出
excel
表格,但是发现
请求
成功,但是没有
下载
框,在浏览器中按F12查看,在调用的成功的response中查看到一堆乱码数据,考虑是不是返回的数据类型有
问题
,百度了一波,才发现
不能
使用
ajax
进行
请求
如果页面使用了frame框架, 点击mvc方法调用地址, 但是没有弹出
下载
框, 而其他的配置代码没有
问题
的话, 前后台使用...
在
ajax
中,设置
请求
头为Content-type: application/octet-stream,无法触发
下载
。
header('Content-type: application/octet-stream; charset=utf8');//
下载
动作的关键
Header("Accept-Ranges: bytes");
header('Content-Disposition: attachment; filename=120.png');
一、失败的原因
那是因为response原因,一般
请求
2.
问题
分析:
前端是直接通过
ajax
进行
请求
的,因为服务器端已经通过
文件
的形式响应给前端所以没有任何的json数据返回需要进行接收, 故无法
下载
;
3.解决办法:
①使用window.location.
href
= ‘url’;的方式进行
请求
,
问题
得到解决.
window.location.
href
= "http://localhost/d
这里写自定义目录标题
Ajax
请求
无法
导出
excel
!!!
Ajax
请求
无法
导出
excel
!!!
最近要做一个table数据
导出
excel
的需求,本来想
Ajax
请求
一下后台就可以了,没想到死活不见效果.上网搜了一下,遇到此类
问题
的不少,在这里记录一下.
问题
描述
前端发送
ajax
请求
,后端生成
excel
文件
,最后用response输出
文件
流,没有报错也没有
文件下载
提示。
ajax
请求
只是个“字符型”的
请求
,即
请求
的内容是以文本类型存放的。
文件
的
下载
是以二进制形式进行的,
ajax
没法解析后台返回的文
success: function (result) {
// 返回的数据是
Excel
文件
流,可以进行
下载
var blob = new Blob([result], { type: 'application/vnd.ms-
excel
' });
var fileName = '
export
.xlsx';
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, fileName);
} else {
var downloadLink = window.URL.createObjectURL(blob);
var a = document.createElement('a');
a.style.display = 'none';
a.
href
= downloadLink;
a.download = fileName;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(downloadLink);
document.body.removeChild(a);
error: function (xhr, status, error) {
// 错误处理
2.后端生成
Excel
文件
流并返回给前端。
```java
@RequestMapping(value = "/
export
/
excel
", method = RequestMethod.POST)
public void
export
Excel
(HttpServletRequest request, HttpServletResponse response) {
try {
// 构造
Excel
文件
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Hello, World!");
// 输出
Excel
文件
流
response.setContentType("application/vnd.ms-
excel
");
response.setHeader("Content-disposition", "attachment; filename=
export
.xlsx");
ServletOutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
以上代码仅供参考,具体实现需要根据实际情况进行调整。
### 回答2:
在使用
AJAX
导出
Excel
文件
时,可以通过以下步骤实现:
1. 创建一个包含
导出
功能的按钮或链接,并在其上绑定一个点击事件。
2. 在点击事件中,使用
AJAX
向服务器发送一个GET或POST
请求
,
请求
导出
Excel
文件
的URL。
3. 服务器接收到该
请求
后,根据
请求
参数生成
Excel
文件
,并将其保存到服务器本地或者内存中。
4. 服务器将生成的
Excel
文件
的路径或内容返回给前端。
5. 前端接收到来自服务器的响应后,可以通过以下两种方式进行处理:
- 使用window.open()函数将返回的
Excel
文件
路径作为参数,在新窗口中打开
Excel
文件
进行
下载
。例如: window.open(response.path),其中response.path是从服务器返回的
Excel
文件
路径。
- 使用FileSaver.js等
文件
保存库将返回的
Excel
文件
内容保存为本地
文件
。例如: 使用FileSaver.js可以通过以下代码将返回的
Excel
文件
内容保存为本地
文件
:saveAs(new Blob([response.content]), "
excel
.xls"),其中response.content是从服务器返回的
Excel
文件
内容。
需要注意的是,在服务器端生成
Excel
文件
时,可以使用像OpenPyXL或PHP
Excel
这样的
Excel
文件
处理库来生成和处理
Excel
文件
。此外,服务器需要将生成的
Excel
文件
转换为可
下载
的格式,如.xls或.xlsx,或者返回
Excel
文件
的二进制内容。
总之,通过
AJAX
实现
导出
Excel
文件
,可以通过向服务器发送
请求
,生成
Excel
文件
,并将其返回给前端,然后前端根据需要进行
下载
或保存。
### 回答3:
Ajax
导出
excel
文件
可以通过以下步骤实现:
1. 在前端页面中,首先要引入jquery等相关库
文件
,以便使用
Ajax
进行异步操作。
2. 在页面中添加一个
导出
按钮,并为按钮添加点击事件。
3. 在点击事件中,使用
Ajax
发送一个
请求
到后端服务器。
请求
的URL应该指向用于生成
excel
文件
的接口。
4. 后端接口接收到
请求
后,根据
请求
参数生成
excel
文件
,并将其保存到服务器指定的路径。
5. 后端将
excel
文件
的路径返回给前端。
6. 前端接收到
excel
文件
的路径后,可以通过创建一个`<a>`标签,设置其`
href
`属性为
excel
文件
的路径,同时设置`download`属性为
文件
名。
7. 通过使用`document.body.appendChild(a)`和`a.click()`操作,模拟用户点击
下载
链接的过程。
8. 这样,用户就可以通过点击
导出
按钮来
下载
生成的
excel
文件
。
需要注意的是,由于浏览器的安全策略限制,
不能
直接通过
Ajax
将
文件
内容返回给前端,而是需要先将
文件
保存到服务器端,再将
文件
路径返回给前端进行
下载
。另外,生成
excel
文件
的后端代码可以使用一些库或工具,如PHP
Excel
、Node.js等,具体使用哪种方案可以根据实际需求来选择。