在控制器中下载:注意问题
- 下载的路径是服务器的路径地址,我们可以获取 Env::get(‘root_path’);
- 需要去 php.ini 开启 ;extension=php_fileinfo.dll 否则,如下报错
1. 使用 think\response\Download
<?php
namespace app\test\controller;
use think\facade\Env;
use think\response\Download;
class MyDownload
{
public function download1()
{
$root = Env::get('root_path');
return new Download($root. '/upload/a.txt');
}
}
效果:
2. 使用助手函数
<?php
// 使用助手函数
public function download2()
{
return download(Env::get('root_path') . '/upload/a.txt', 'xx.txt');
}
3. 其他说明
下载文件名可以省略后缀,会自动判断(后面的代码都以助手函数为例)
<?php
public function download()
{
// 和上面的下载文件名是一样的效果
return download('image.jpg', 'my');
}
如果需要设置文件下载的有效期,可以使用
<?php
public function download()
{
// 设置300秒有效期
return download('image.jpg', 'my')->expire(300);
}
除了expire
方法外,还支持下面的方法:
方法 | 描述 |
---|---|
name | 命名下载文件 |
expire | 下载有效期 |
isContent | 是否为内容下载 |
mimeType | 设置文件的mimeType类型 |
助手函数提供了内容下载的参数,如果需要直接下载内容,可以在第三个参数传入true
:
<?php
public function download()
{
$data = '这是一个测试文件';
return download($data, 'test.txt', true);
}
<?php
namespace app\test\controller;
use think\facade\Env;
use think\response\Download;
class MyDownload
{
private $rootPath = '';
public function __construct()
{
$this->rootPath = Env::get('root_path');
}
public function download ()
{
return new Download($this->rootPath . '/upload/a.txt');
}
}