深入理解ThinkPHP6中的文件缓存

silverwq
2022-09-19 / 0 评论 / 476 阅读 / 正在检测是否收录...

场景

我们经常会将excel导入模板文件保存在一个目录,然后提供一个下载按钮,去下载这个模板文件,但是默认情况下thinkphp会在文件响应的时候,会让浏览器缓存一段时间,导致模板文件修改没有立即得到生效

// 下载模板
public function downloadExcelTpl($fileName)
{
    $file = ErpFacade::getContainerAssetsPath() . DIRECTORY_SEPARATOR . $fileName;
    return (new File($file))->header([
        'Access-Control-Expose-Headers' => 'filename',
        'filename' => $fileName,
    ]);
}

File类的默认缓存时间如下所示:
l885tl0u.png

解决方法

我们可以手动设置文件缓存的时间为0,修改为如下代码即可

// 下载模板
public function downloadExcelTpl($fileName)
{
    $file = ErpFacade::getContainerAssetsPath() . DIRECTORY_SEPARATOR . $fileName;
    return (new File($file))->header([
        'Access-Control-Expose-Headers' => 'filename',
        'filename' => $fileName,
    ])->expire(0);// 设置缓存时间为0
}
0

评论 (0)

取消