ThinkPHP---TP功能类之附件下载

【案例】实现公文中附件下载

(1)修改模板文件showList.html,展示列表文件信息

          将数据表中的filename(原始文件名)展示到附件下

<td>{$vol.filename}</td>

(2)附件后添加下载按钮,点击实现下载

分析:如果有附件,则显示下载按钮;没有的话则不显示。有没有附件可以取决于hasfile字段(0表示没有,1表示有),可以使用if标签进行判断

<td>{$vol.filename}<if condition="$vol.hasfile == 1">【下载】</if></td>
除了使用hasfile字段,还可以通过filepath字段和filename字段进行判断,若不为空则表示有附件
判断变量是否为空,使用<empty>或者<notempty>标签
所以上面可以改写为以下代码
<td>{$vol.filename}<notempty name="vol.filename"><a href="__CONTROLLER__/download/id/{$vol.id}">【下载】</a></notempty></td>

(3)加下载链接

<td>{$vol.filename}<if condition="$vol.hasfile == 1"><a href="__CONTROLLER__/download/id/{$vol.id}">【下载】</a></if></td>

(4)编写下载方法download

//download方法
    public function download(){
        //接收id
        $id = I('get.id');
        //查询数据
        $data = M('Doc') -> find($id);
        //下载代码,主要需要的是路径,接下来拼接路径
        $file = WORKING_PATH . $data['filepath'];
        //输出文件
        header("Content-type: application/octet-stream");//文件流,告诉浏览器输出的东西是文件流
        header('Content-Disposition: attachment; filename="' . basename($file) . '"');//文件名
        header("Content-Length: ". filesize($file));//文件大小
        //输出缓冲区
        readfile($file);
    }

效果:

.

原文地址:https://www.cnblogs.com/fightjianxian/p/8698645.html