1、使用composer安装HttpFoundation组件
composer require symfony/http-foundation -v 3.4.*
2、目录结构
3、FileDownload.php对httpfoundation组件下载功能封装(支持中文文件名)
<?php
namespace download;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\HttpFoundation\Request;
class FileDownload extends BinaryFileResponse{
/**
* 构造函数
* @param string $file 文件路径
* @param integer $status 响应状态
* @param array $headers 响应头信息
* @param boolean $public Cache-Control
* @param string $contentDisposition Content-Disposition
* @param boolean $autoEtag Etag
* @param boolean $autoLastModified LastModified
* @return BinaryFileResponse
*/
public function __construct($file, $status = 200, $headers = [], $public = true, $contentDisposition = null, $autoEtag = false, $autoLastModified = true)
{
$file = $this->encoding($file, 'GBK', 'UTF-8');
parent::__construct($file, $status, $headers, $public, $contentDisposition, $autoEtag, $autoLastModified);
}
/**
* 使用php进行文件下载
* @param string $filename 显示文件名(不包含后缀)
*/
public function download($showname = '')
{
$showname = $this->getShowName($showname);
$this->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $showname);
$request = Request::createFromGlobals();
$this->prepare($request)->send();
}
/**
* 使用X-SendFile进行文件下载
* @param string $filename 显示文件名(不包含后缀)
*/
public function xDownload($showname, $Sendfile = 'X-Sendfile')
{
$showname = $this->getShowName($showname);
$this->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $showname);
$request = Request::createFromGlobals();
$request->headers->set('X-Sendfile-Type', $Sendfile);
//设置使用X-SendFile下载文件
BinaryFileResponse::trustXSendfileTypeHeader();
$this->prepare($request)-