Ich benutze Laravel 5.2 und Zipper, um ZIP-Archiv in einem Fly zu erstellen und es vom Benutzer herunterladen. Ich denke, dieses Problem ist im Allgemeinen nicht eng mit Laravel oder Zipper verwandt. Schritte:PHP kann nicht auf neu erstellte Zip-Datei zugreifen
- Benutzer klicken Sie auf Link download_all.
- Erste PHP-Skript erstellen Archiv.
- Weiter das gleiche Skript Push-Datei zum Erzwingen des Benutzers Download.
Alles klingt normal, aber ich seltsames Verhalten habe, dass nach ZIP-Archiv erstellt wird (Punkt 2) php/Server diese neu erstellte Datei nicht sehen kann. Sowohl die Dateigröße als auch die Dateiausdrücke in $ filePath geben false zurück, aber die Datei existiert. Ich kann Datei warum nicht lesen?
Wenn ich Benutzer zu $ filePath umlenke (anstatt es zu lesen und zum Download zu drücken), ist alles in Ordnung und der Benutzer bekommt die Datei. Aber warum kann ich während der "Skript-Lebensdauer" nicht auf die neu erstellte Datei zugreifen? $ Pfade sind korrekt. Getestet unter Windows 7 und Unix.
Irgendeine Idee?
Code:
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);
}
haben Sie die benötigten Header zum Download hinzugefügt? –
ja, natürlich, oberer Code bearbeitet – Adiasz
Das ist kein AJAX-Aufruf, oder? –