php ajax上传excel,php ajax生成excel并下载

目标:使用php,通过ajax请求的方式生成一个excel,然后下载。

思路:大致思路是发送一个ajax请求到后台,后台php处理后生成一个excel文件,然后把生成的文件放到一个临时目录,然后把文件链接返回给前端。前端接受到后,然后通过给定的地址,去下载该文件....

代码实现:

前端部分:

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

$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

phpexcel生成excel并下载

Loader::import('PHPExcel.Classes.PHPExcel'); // tp5中只需将phpexcel文件放入extend文件夹中,即可采用该方法引入,需要先 use thin ...

使用node&period;js生成excel报表下载&lpar;excel-export express篇&rpar;

引言:日常工作中已经有许多应用功能块使用了nodejs作为web服务器,而生成报表下载也是我们在传统应用. java中提供了2套类库实现(jxl 和POI),.NET 作为微软的亲儿子更加不用说,各种 ...

java动态生成excel打包下载

@SuppressWarnings("unchecked") public String batchExport() throws DBException{ @SuppressWa ...

Asp&period;net MVC 简单实现生成Excel并下载

由于项目上的需求,需要导出指定条件的Excel文件.经过一翻折腾终于实现了. 现在把代码贴出来分享 (直接把我们项目里面的一部份辅助类的代码分享一下) 我们项目使用的是Asp.Net MVC4.0模式 ...

后台生成excel前端下载

后台生成Excel时前端获取下载 Controller控制器: package com.example.test.controller; import com.example.test.common. ...

ASP&period;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 ...

&period;net生成Excel,并下载

生成Excel的方式有很多种,这里记录两个最简单的: 1.将数据保存为html,然后输出到客户端,保存为Excel文件: 2.通过\t\n生成字符串,然后输出到客户端,保存为Excel. 以上两者的原 ...

随机推荐

Oracle 编程

编程:储存过程,自定义函数,触发器,包. 储存过程 在命令窗口用exec调 作用:存储在数据库中用于完成某个功能的程序 创建在 procedure里 create or replace procedu ...

Data Deduplication in Windows Server 2012

https://blogs.technet.microsoft.com/filecab/2012/05/20/introduction-to-data-deduplication-in-windows ...

web项目嵌入Jetty运行的两种方式&lpar;Jetty插件和自制Jetty服务器&rpar;

在开发Java web项目时候,可以在项目中嵌入Jetty服务的方式来运行web程序. 由于最近开发web项目,自己使用的是比较旧的eclipse不支持导入tomcat来运行项目,于是就学习了下使用项 ...

SharePoint 2010 加入项目到用户&sol;欢迎菜单

SharePoint 2010 加入项目到用户/欢迎菜单         近期QQ群里有人问怎样加入链接项目到SharePoint 2010 网站右上角的下拉菜单中.事实上,SharePoint 20 ...

Android基础知识04—Activity活动之间传递数据

------活动之间传递数据------ 向下一个活动传递数据: Intent中提供了一系列的putExtra()方法,可以把数据暂存到Intent中,启动另一个活动的时候就可以取出来. 代码: (存 ...

比较Maven和Ant

从今天开始,整理maven一系列. Maven 它是什么? 如何回答这个问题要看你怎么看这个问题. 绝大部分Maven用户都称Maven是一个"构建工具":一个用来把源代码构建成可 ...

全文搜索引擎 Elasticsearch 入门教程

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选. 它可以快速地储存.搜索和分析海量数据.维基百科.Stack Overflow.Gi ...

盛最多水的容器&lpar;java实现&rpar;

题目: 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的 ...

Java - ConcurrentMap原理

https://blog.csdn.net/justloveyou_/article/details/72783008 结构是怎样的?segment是什么?hashEntry是什么?默认可并发的大小是 ...

uva-10561-nim

题意: 给出一个连续的棋盘,有的位置为'.',有的位置为'X',二者轮流下子,当有一方获得连续三个子的时候取胜. 对于胜态,一种情况是当前局面出现"XX"/"X.X&qu ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值