导出文件浏览器不自动下载文件

1. 检查前端请求方式,不能用ajax请求,用windows.open(url);或者window.location.href=url;

var url = "xxxx?id="+id

2. 检查请求头里面的contentType是不是正确的mime,mime:参考:

Common MIME types - HTTP | MDN

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
想要实现导出csv文件自动下载,可以在控制器中增加以下代码: ```php // 设置响应头信息 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="filename.csv"'); header('Cache-Control: max-age=0'); // 获取数据列表(假设数据已经准备好了) $dataList = [ ['id'=>1,'name'=>'张三','age'=>20], ['id'=>2,'name'=>'李四','age'=>30], ['id'=>3,'name'=>'王五','age'=>40], ]; // 打开PHP文件句柄,php://output 表示直接输出到浏览器 $fp = fopen('php://output', 'a'); // 输出Excel列名信息 $head = ['编号','姓名','年龄']; foreach ($head as $i => $v) { $head[$i] = iconv('utf-8', 'gbk', $v); } // 将数据通过fputcsv写到文件句柄 fputcsv($fp, $head); // 计数器 $cnt = 0; // 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小 $limit = 100000; // 逐行取出数据,不浪费内存 foreach ($dataList as $data) { $cnt++; // 刷新一下输出buffer,防止由于数据过多造成问题 if ($limit == $cnt) { ob_flush(); flush(); $cnt = 0; } foreach ($data as $i => $v) { $data[$i] = iconv('utf-8', 'gbk', $v); } fputcsv($fp, $data); // 写入一行数据到CSV文件中 } // 关闭文件句柄 fclose($fp); ``` 其中,设置响应头信息可以让浏览器自动下载文件,而不是直接在页面中展示。 需要注意的是,由于数据量大的情况下,可能会导致内存溢出,因此可以采用逐行读取数据的方式,减少内存占用。同时,为了防止数据过多造成问题,可以设置一个计数器,每隔一定数量的数据就刷新一下输出buffer。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值