我使用Laravel 5.2和Zipper来创建ZIP存档并由用户下载。我认为这个问题通常与Laravel或Zipper没有严格的关系。步骤进行:
一切听起来都很正常但我有奇怪的行为,在创建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);
}
答案 0 :(得分:1)
@Holger的推动。 拉链应关闭以保存文件。
正确的代码:
Zipper::make($zipPath)->add($sourceFilesDir)->close();
<强> - &GT; close()方法强>
不幸的是,在Zipper文档中没有明确提到这一点。