一般来说都是后端创建csv 文件保存在服务器上 返回给前端下载地址
一、前端代码
<button id="downloadBtn" class="layui-btn layui-btn-sm">下载</button>
function downloadFile(url) {
// 创建隐藏的<a>标签,并设置下载属性
var link = document.createElement('a');
link.href = url;
link.download = 'data.csv';
// 模拟触发点击事件进行下载
link.style.display = 'none';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
$('#downloadBtn').click(function() {
// 发送fetch请求获取CSV文件的下载链接
fetch('/PendingInventory/export_data', { method: 'GET' })
.then(response => response.text())
.then(downloadUrl => {
// 下载文件
downloadFile(downloadUrl);
})
.catch(error => console.error('下载文件时出错:', error));
});
二、后端代码(PHP):
public function export_data(){
$sql = "SELECT * FROM pending_inventorys";
$res = $this->PendingInventorys->query($sql);
$excel_data = [];
foreach ($res as $v) {
$row = array_map('strval', $v['pending_inventorys']);
$excel_data[] = $row;
}
$title = array('id','清单编号','确认操作的清单编号','入库编号','批次号','sku','入库数量','批次数量','留样数量','实际装箱数量','采购人','装箱日期','出库日期','待处理天数','处理进度','处理人','处理方式','创建时间','修改时间');
$row_format = array('string','string','string','string','string','string','integer','integer','integer','integer','string','string','string','string','string','string','string','string','string');
$file_name = SYSTEM_ID.'待处理库存csv';
App::import('Controller','DownLoadFile');
$DownLoadFile = new DownLoadFileController();
$file = $DownLoadFile->insunny_xlsx_load($title,$excel_data,$file_name,false,'',$row_format);
echo 'http://' . $_SERVER['SERVER_NAME'] . str_replace('./','/',$file);
exit;
}