Я использую drupal в качестве бэк-энда.
в друпале я получаю несколько .pdf файлов. и затем заархивируйте их, используя drupal zip-архив . затем сохраняя этот архив в папке tmp моего сервера, я получаю папку tmp, используя php sys_get_temp_dir ()
сейчас...
что я должен вернуть в интерфейс (Angular), чтобы пользователь мог загрузить эту папку ..
это пример кода, который я использовал для архивирования:
$nodesIds = [1024, 1023, 1022]; // those are just some example ids, i get the real ids from the front end post request.
$zipName = $this->generateUniqueName();
$zip = new \ZipArchive;if(!$zip->open(sys_get_temp_dir() . '/' . $zipName, constant("ZipArchive::CREATE"))) {
return new JsonResponse('could not open zip');
}
foreach ($nodesIds as $id) {
$node = \Drupal\node\Entity\Node::load($id);
$uri = $node->filed_file->entity->getFileUri();
$name = $node->field_file->entity->id() . '_'. $node->field_file->entity->getFilename();
$url = $file_system->realpath($uri);
$zip->addFile($url, $name);
}
$zip->close();
Я попытался вернуть ссылку на zip-папку на сервере:
return new JsonResponse(sys_get_temp_dir() . '/' . $zipName);
но я не знаю, что с этим делать из углового.
Также пытался вернуть поток , используя symfony:
$stream = new Stream(sys_get_temp_dir() . '/' . $zipName);
$response = new BinaryFileResponse($stream);
поток, а не файл, потому что пользователь выбирает, какие файлы архивировать .. поэтому он может выбирать столько, сколько он хочет ... он может получить даже 100 .pdf файлов ..
все работает нормально, и я получаю zip-папку в tmp .. но что теперь?
Я хочу загрузить эту заархивированную папку в браузер пользователя ..
Но я не знаю как!. я должен вернуть заархивированную папку, затем использовать ее в качестве блоба или как-то разобраться с ней и передать ее пользователю,
или, может быть, правильный путь - отправить ссылку обратно в ее местоположение в папке tmp, а в угловом режиме я только получаю доступ к этому местоположению и каким-то образом получаю папку (я не знаю, возможно ли это даже из-за разрешений и безопасности), или Есть ли другой лучший способ, о котором я не знаю.
Большое спасибо.