php ajax生成excel并下载
目标:使用php,通过ajax请求的方式生成一个excel,然后下载。
思路:大致思路是发送一个ajax请求到后台,后台php处理后生成一个excel文件,然后把生成的文件放到一个临时目录,然后把文件链接返回给前端。前端接受到后,然后通过给定的地址,去下载该文件....
代码实现:
前端部分:
<pre name="code" class="html">function outExcel(){
var allSelect = $('._newId:checked').length;
if(allSelect == 0){
layer.msg('请选择需要导出的记录');
return false;
}
var ids = [];
$('._newId:checked').each(function(){
ids.push($(this).val());
});
var params = {id:ids};
$.post("{:U('Home/Saidi/outExcel')}",params,function(res){
if(res.status){
window.location.href = ("{:U('Home/Saidi/download')}?file="+res.url+'&token='+res.token);
}else{
layer.msg('系统错误,操作失败');
}
},'json');
}
其中token是用来做安全校验的.....
后台部分:
使用的是PHPExcel插件。这里用的是TP框架
public function outExcel(){
$ids = I('post.id','','trim');
if(empty($ids)){
exit(json_encode(array('status'=>false,'url'=>'','token'=>'')));
}
$where['id'] = array('in',$ids);
$data = M('news','xyl_')->where($where)->select();
if(!empty($data)){
Vendor('PHPExcel.PHPExcel');
Vendor('PHPExcel.PHPExcel.IOFactory');
$phpExcel = new \PHPExcel();
$phpExcel->setActiveSheetIndex(0)
->setCellValue('A1', '序号')
->setCellValue('B1', '新闻标题')
->setCellValue('C1', '新闻摘要')
->setCellValue('D1', '新闻内容')
->setCellValue('E1', '新闻来源')
->setCellValue('F1', '作者')
->setCellValue('G1', '来源网址');
$len = count($data);
for($i = 0 ; $i < $len ; $i++){
$v = $data[$i];
$rownum = $i+2;
$phpExcel->getActiveSheet()->setCellValue('A' . $rownum, $i);
$phpExcel->getActiveSheet()->setCellValue('B' . $rownum, $v['title']);
$phpExcel->getActiveSheet()->setCellValue('C' . $rownum, $v['summary']);
$phpExcel->getActiveSheet()->setCellValue('D' . $rownum, $v['content']);
$phpExcel->getActiveSheet()->setCellValue('E' . $rownum, $v['from']);
$phpExcel->getActiveSheet()->setCellValue('F' . $rownum, $v['author']);
$phpExcel->getActiveSheet()->setCellValue('G' . $rownum, $v['url']);
}
$phpExcel->setActiveSheetIndex(0);
$filename=date('YmdHis').'.xlsx';
$objWriter=\PHPExcel_IOFactory::createWriter($phpExcel,'Excel2007');
$filePath = C('TMP_PATH').$filename;
$objWriter->save($filePath);
if(!file_exists($filePath)){
$response = array(
'status' => false,
'url' => '',
'token'=>''
);
}else{
$response = array(
'status' => true,
'url' => $filename,
'token'=>$this->getDownLoadToken($filename)
);
}
}else{
$response = array(
'status' => false,
'url' => '',
'token'=>''
);
}
exit(json_encode($response));
}
private function getDownLoadToken($filename,$length = 10){
$str = null;
$strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
$max = strlen($strPol)-1;
for($i=0;$i<$length;$i++){
$str.=$strPol[rand(0,$max)];//rand($min,$max)生成介于min和max两个数之间的一个随机整数
}
$res = md5($str.time());
S($res,$filename);
return $res;
}
public function download(){
$fileName = I('get.file','','trim');
$token = I('get.token','','trim');
if(empty($token) || !S($token)){
header("HTTP/1.0 404 Not Found");
exit;
}
$path = C('TMP_PATH').$fileName;
if(!file_exists($path)){
header("HTTP/1.0 404 Not Found");
exit;
}else{
$file = @fopen($path,"r");
if(!$file){
header("HTTP/1.0 505 Internal server error");
exit;
}
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: ".filesize($path));
header("Content-Disposition: attachment; filename=" . $fileName);
while(!feof($file)){
echo fread($file,2048);
}
fclose($file);
@unlink($path);
S($token,NULL);
exit();
}
}
getDownLoadToken这个方法是用来获取凭证的,也就是token
原文:https://blog.csdn.net/wangyibo5843/article/details/53116717
php ajax生成excel并下载的更多相关文章
- phpexcel生成excel并下载
Loader::import('PHPExcel.Classes.PHPExcel'); // tp5中只需将phpexcel文件放入extend文件夹中,即可采用该方法引入,需要先 use thin ...
- 使用node.js生成excel报表下载(excel-export express篇)
引言:日常工作中已经有许多应用功能块使用了nodejs作为web服务器,而生成报表下载也是我们在传统应用. java中提供了2套类库实现(jxl 和POI),.NET 作为微软的亲儿子更加不用说,各种 ...
- java动态生成excel打包下载
@SuppressWarnings("unchecked") public String batchExport() throws DBException{ @SuppressWa ...
- Asp.net MVC 简单实现生成Excel并下载
由于项目上的需求,需要导出指定条件的Excel文件.经过一翻折腾终于实现了. 现在把代码贴出来分享 (直接把我们项目里面的一部份辅助类的代码分享一下) 我们项目使用的是Asp.Net MVC4.0模式 ...
- 后台生成excel前端下载
后台生成Excel时前端获取下载 Controller控制器: package com.example.test.controller; import com.example.test.common. ...
- ASP.NET网页生成EXCEL并下载(利用DataGrid或GridView等)
前几天要在后台查询数据库内容(用entity framework),将查询出来的信息(List或DataTable形式)转成EXCEL供用户下载.经过谷歌.百度搜索,终于搜出了一些代码.似乎可用了,结 ...
- NPOI生成excel并下载
NPOI文件下载地址:http://npoi.codeplex.com/ 将文件直接引用至项目中即可,,,,, 虽然网上资料很多,但有可能并找不到自己想要的功能,今天闲的没事,所以就稍微整理了一个简单 ...
- 使用ajax的post方式下载excel
项目需求,前端发起ajax请求,后端生成excel并下载,同时需要在header头中,带上token验证信息,参考了很多文章,最终实现如下: PHP后端使用base64: $filename = 'd ...
- .net生成Excel,并下载
生成Excel的方式有很多种,这里记录两个最简单的: 1.将数据保存为html,然后输出到客户端,保存为Excel文件: 2.通过\t\n生成字符串,然后输出到客户端,保存为Excel. 以上两者的原 ...
随机推荐
- 在IDEA上对SpringBoot项目配置Devtools实现热部署
spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. devtool ...
- 在python中使用elasticsearch 需要注意的一些问题
1, py es client 使用是 http ,java api 使用是 tcp 2, es.scroll() 方法 在查询多个索引的时候会报 : elasticsearch.exception ...
- python的subprocess模块介绍
一.subprocess以及常用的封装函数运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序.在Python ...
- Websocket实现Java后台主动推送消息到前台
写在前面 需求: 项目测试, 缺少用户登录失败给admin推送消息, 想到这个方式, 当用户登录失败时, admin用户会在页面看到咣咣乱弹的alert. 正文 pom.xml <!-- web ...
- [linux]杀死同一个应用的所有进程
ps -ef|grep "c.py"|grep -v grep|awk '{print $2}' ps -ef|grep "c.py"|grep -v grep ...
- ffmpeg接收udp输入的h264文件流,推流到rtmp服务器
ffmpeg -re -f h264 -i udp://192.168.5.49:10002 -vcodec libx264 -f flv rtmp://192.168.5.155/live/1
- <div> <p> <span>的用法和区别
<div> 标签可以把文档分割为独立的.不同的部分.它可以用作严格的组织工具,并且不使用任何格式与其关联. 更重要的意义是在网页的动态实现过程中,对划分的区域统一处理,例如换背景色.字体等 ...
- WebGL学习笔记(七):输入和动画
目前为止,我们绘制出来的3D物体都是静止的,接下来我们需要让桌面上的小盒子可以根据我们按键(上下键)前进后退: 输入方面,监听按键和鼠标消息直接在document上添加对应的监听就行了: 动画这块,我 ...
- CefSharp在高DPI的屏幕上出现黑边(winform)
目录 问题现象 解决办法 1.将cefsharp的gpu设置为无效,(后遗症,h5动画会出现卡顿现象,慎用) 2.将屏幕的DPI置为96(缩放比例为100%)(后遗症,不可能每个电脑都去配置) 3.支 ...
- Mudos扩展efunc,packages方式
Mudos扩展efunc,packages方式 首先packages目录建好C文件 我们这里测试了一个mongodb的 mongodb_spec.c mongodb.h mongodb.c 这里具体的 ...