在控制器中下载:注意问题

  1. 下载的路径是服务器的路径地址,我们可以获取 Env::get(‘root_path’);
  2. 需要去 php.ini 开启 ;extension=php_fileinfo.dll 否则,如下报错

image.png

1. 使用 think\response\Download

  1. <?php
  2. namespace app\test\controller;
  3. use think\facade\Env;
  4. use think\response\Download;
  5. class MyDownload
  6. {
  7. public function download1()
  8. {
  9. $root = Env::get('root_path');
  10. return new Download($root. '/upload/a.txt');
  11. }
  12. }

效果:
image.png


2. 使用助手函数

  1. <?php
  2. // 使用助手函数
  3. public function download2()
  4. {
  5. return download(Env::get('root_path') . '/upload/a.txt', 'xx.txt');
  6. }

3. 其他说明

下载文件名可以省略后缀,会自动判断(后面的代码都以助手函数为例)

  1. <?php
  2. public function download()
  3. {
  4. // 和上面的下载文件名是一样的效果
  5. return download('image.jpg', 'my');
  6. }

如果需要设置文件下载的有效期,可以使用

  1. <?php
  2. public function download()
  3. {
  4. // 设置300秒有效期
  5. return download('image.jpg', 'my')->expire(300);
  6. }

除了expire方法外,还支持下面的方法:

方法 描述
name 命名下载文件
expire 下载有效期
isContent 是否为内容下载
mimeType 设置文件的mimeType类型

助手函数提供了内容下载的参数,如果需要直接下载内容,可以在第三个参数传入true

  1. <?php
  2. public function download()
  3. {
  4. $data = '这是一个测试文件';
  5. return download($data, 'test.txt', true);
  6. }
  1. <?php
  2. namespace app\test\controller;
  3. use think\facade\Env;
  4. use think\response\Download;
  5. class MyDownload
  6. {
  7. private $rootPath = '';
  8. public function __construct()
  9. {
  10. $this->rootPath = Env::get('root_path');
  11. }
  12. public function download ()
  13. {
  14. return new Download($this->rootPath . '/upload/a.txt');
  15. }
  16. }