我使用Laravel 5.2和
Zipper来创建ZIP存档并由用户下载.我认为这个问题通常与Laravel或Zipper没有严格的关系.脚步:
>用户点击链接download_all.
>第一个php脚本创建存档.
>接下来,相同的脚本推送创建的文件以强制用户下载.
一切听起来都很正常,但我有奇怪的行为,创建zip存档后(第2点)php / server无法看到这个新创建的文件.
$filePath上的filesize和file_exists都返回false但文件存在.我不能读文件为什么?
当我将用户重定向到$filePath(而不是阅读它并推送下载)时,一切正常,用户获取文件.但为什么我不能在“脚本生命周期”中访问新创建的文件? $path是正确的.
在Windows 7和Unix上测试过.
任何的想法?
码:
public function downloadAll($id)
{
$sourceFilesDir = 'upload/source/' . $id;
$zipPath = 'upload/source-zip/' . date('Y-m-d-H-i-s') . '.zip';
Zipper::make($zipPath)->add($sourceFilesDir);
$fullPath = public_path($zipPath);
// works
// return response()->redirectTo($zipPath);
$headers = [
'Content-Type: application/zip',
'Content-Transfer-Encoding: Binary',
'Content-Length: ' . filesize($fullPath),
];
// dont works, cant see file
return response()->download($fullPath, basename($zipPath), $headers);
}
最佳答案 @Holger吹嘘.
应关闭拉链以保存文件.
正确的代码:
Zipper::make($zipPath)->add($sourceFilesDir)->close();
– > close()方法
不幸的是,在Zipper文档中没有明确提到这一点.