技术饭
post方式下载文件解决方案
post方式下载文件解决方案,在php中文件下载一般是使用get方式比较多,那么如果想做成post方式应该如何实现呢,今天看了一些博客,然后就自己弄了一下,可以参考一下。
/**
* [aikehou_downall 组装下载数据的id:批量下载]
* @param {[string]} url [处理数据的url地址]
* @return {[json]} [返回json格式]
*/
function aikehou_downall(url){
var ids = [];
$(".select_ids:checked").each(function(index, el) {
ids.push($(this).val());
});
if(ids.length == 0){
aikehou_tips('请选择要下载的数据!', 'danger', 'fa fa-close');
return false;
}
//变成字符串
ids = ids.join(',');
//发送数据
aikehou_down(url, ids);
}
/**
* [aikehou_down 文件下载函数]
* @param {[string]} url [处理数据的url地址]
* @param {[string]} ids [数据的id字符串]
*/
function aikehou_down(url, ids){
//移除原始表单
$("#downloadform").remove();
//新建表单
var downform = $("<form>");
downform.attr({
id: 'downloadform',
style: 'display:block',
method: 'post',
action: url,
target: '_blank'
});
//获取数组
ids = ids.split(',');
if(ids.length == 0){
return false;
} else {
//组装因隐藏值
for (var i = 0; i < ids.length; i++) {
downform.append('<input type="hidden" name="downfiles[]" value="' + ids[i] + '" />');
}
}
//将表单放入body中
$("body").append(downform);
//表单提交
downform.submit();
}
其中,aikehou_down()是单个下载,aikehou_downall()是多个,aikehou_down()函数的作用是生成一个form表单,然后将传过来需要下载的数据写入到hidden的input中,然后提交数据到相应的url。
/**
* [downsqlfiles 压缩下载]
* @return [type] [description]
*/
public function downsqlfiles()
{
if(request()->isPost()){
$data_path = config('system_dbback_path');
//获取数据
$id = input('post.downfiles/a');
//没有数据
if(empty($id)){
$this->error(lang('l_access_error'));
}
//下载数据,新建zip,然后下载并删除
$filetopzip = new \download\Filetozip($data_path, 'sqldown.zip');
$filetopzip->tozip($id);
//单个文件下载
/*$filetozip = new \download\Download($data_path,'aikehou.sql');
$filetozip->getfiles();*/
} else {
$this->error(lang('l_access_error'));
}
}
经过这个php处理之后就可以压缩下载了,文件打包下载:demo.zip
文明上网理性发言!
想买你的内容管理系统,一直加你Q也不回