效果图:
实现步骤:
1、在备份列表模板中,文件名加入超级链接。文件位于:
applicationadminviewgeneraldatabaseindex.html
<td><a href="{:url('download?file=')}<%=backuplist[i].file%>"> <%=backuplist[i].file%> </a></td>
2、在控制器中,加入download()操作。在文件:
applicationadmincontrollergeneralDatabase.php
/** * 下载备份文件 * @internal */ public function download() { $config = get_addon_config('database'); $file = $this->request->get('file'); $backupDir = ROOT_PATH . 'public' . DS . $config['backupDir']; $file2 = $backupDir . $file; $download = new thinkresponseDownload($file2); $download->mimeType('zip'); return $download->name($file); }
3、在
thinkphplibrarythinkresponse
目录中,加入Download.php文件(可以在thinkphp5.1.21+中找到,文档参考):
<?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: liu21st <liu21st@gmail.com>// +----------------------------------------------------------------------namespace thinkresponse;use thinkException;use thinkResponse;class Download extends Response{ protected $expire = 360; protected $name; protected $mimeType; protected $isContent = false; protected $openinBrowser = false; /** * 处理数据 * @access protected * @param mixed $data 要处理的数据 * @return mixed * @throws Exception */ protected function output($data) { if (!$this->isContent && !is_file($data)) { throw new Exception('file not exists:' . $data); } ob_end_clean(); if (!empty($this->name)) { $name = $this->name; } else { $name = !$this->isContent ? pathinfo($data, PATHINFO_BASENAME) : ''; } if ($this->isContent) { $mimeType = $this->mimeType; $size = strlen($data); } else { $mimeType = $this->getMimeType($data); $size = filesize($data); } $this->header['Pragma'] = 'public'; $this->header['Content-Type'] = $mimeType ?: 'application/octet-stream'; $this->header['Cache-control'] = 'max-age=' . $this->expire; $this->header['Content-Disposition'] = $this->openinBrowser ? 'inline' : 'attachment; filename="' . $name . '"'; $this->header['Content-Length'] = $size; $this->header['Content-Transfer-Encoding'] = 'binary'; $this->header['Expires'] = gmdate("D, d M Y H:i:s", time() + $this->expire) . ' GMT'; $this->lastModified(gmdate('D, d M Y H:i:s', time()) . ' GMT'); $data = $this->isContent ? $data : file_get_contents($data); return $data; } /** * 设置是否为内容 必须配合mimeType方法使用 * @access public * @param bool $content * @return $this */ public function isContent($content = true) { $this->isContent = $content; return $this; } /** * 设置有效期 * @access public * @param integer $expire 有效期 * @return $this */ public function expire($expire) { $this->expire = $expire; return $this; } /** * 设置文件类型 * @access public * @param string $filename 文件名 * @return $this */ public function mimeType($mimeType) { $this->mimeType = $mimeType; return $this; } /** * 获取文件类型信息 * @access public * @param string $filename 文件名 * @return string */ protected function getMimeType($filename) { if (!empty($this->mimeType)) { return $this->mimeType; } $finfo = finfo_open(FILEINFO_MIME_TYPE); return finfo_file($finfo, $filename); } /** * 设置下载文件的显示名称 * @access public * @param string $filename 文件名 * @param bool $extension 后缀自动识别 * @return $this */ public function name($filename, $extension = true) { $this->name = $filename; if ($extension && false === strpos($filename, '.')) { $this->name .= '.' . pathinfo($this->data, PATHINFO_EXTENSION); } return $this; } /** * 设置是否在浏览器中显示文件 * @access public * @param bool $openinBrowser 是否在浏览器中显示文件 * @return $this */ public function openinBrowser($openinBrowser) { $this->openinBrowser = $openinBrowser; return $this; }}
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。