create($importData); $zip = static::zipUploadFromData($zipData, $files); $targetPath = storage_path($import->path); $targetDir = dirname($targetPath); if (!file_exists($targetDir)) { mkdir($targetDir); } rename($zip->getRealPath(), $targetPath); return $import; } public static function deleteZipForImport(Import $import): void { $path = storage_path($import->path); if (file_exists($path)) { unlink($path); } } public static function zipUploadFromData(array $data, array $files = []): UploadedFile { $zipFile = tempnam(sys_get_temp_dir(), 'bstest-'); $zip = new ZipArchive(); $zip->open($zipFile, ZipArchive::CREATE); $zip->addFromString('data.json', json_encode($data)); foreach ($files as $name => $file) { $zip->addFile($file, "files/$name"); } $zip->close(); return new UploadedFile($zipFile, 'upload.zip', 'application/zip', null, true); } }