1.在封装API中定义下载链接
web\src\api\backend\adminapi.ts
// 获取用户列表(用于选择上级用户)
export function download(type: any) {
const adminInfo = useAdminInfo()
let url = getUrl() + '/admin/api/download' + '?server=1' + '&type=' + type + '&batoken=' + adminInfo.getToken()
return url;
}
2.在列表页中点击下载
<el-button class="export" @click="exportGoods">导出商品</el-button>
<script setup lang="ts">
import { download } from '/@/api/backend/adminapi'
const exportGoods = () => {
let url = download("Goods")
window.location.href = url
// console.log(url);
}
</script>
3.控制器方法 (报错此网页暂时无法连接,或者已转移到新的.., 使用第四个)
这里使用的是spreadsheet包
app\admin\controller\Api.php
// 下载
public function download()
{
$type = request()->get('type');
// $worksheet->setTitle($taskName);
// 直接下载
ob_end_clean();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');
$writer = new Xlsx($spreadsheet);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="hello world.xlsx"');
header('Cache-Control: max-age=0');
$writer->save('php://output');
}
4.新的导出函数
/**
* 新的导出
*/
public function download()
{
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
// 直接下载
ob_end_clean();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
$taskName = 'demo01.xlsx';
$encodedFilename = urlencode($taskName);
$ua = $_SERVER["HTTP_USER_AGENT"];
if (preg_match("/MSIE/", $ua)) {
header('Content-Disposition: attachment; filename="' . $encodedFilename . '"');
} else if (preg_match("/Firefox/", $ua)) {
header('Content-Disposition: attachment; filename*="utf8''' . $taskName . '"');
} else {
header('Content-Disposition: attachment; filename="' . $taskName . '"');
}
header("Content-Transfer-Encoding:binary");
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
$spreadsheet->disconnectWorksheets();
}