Можно ли отправить ZIP-папку с сервера (php) на передний конец (угловой)?или есть другой способ сделать это - PullRequest
0 голосов
/ 26 апреля 2019

Я использую 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, а в угловом режиме я только получаю доступ к этому местоположению и каким-то образом получаю папку (я не знаю, возможно ли это даже из-за разрешений и безопасности), или Есть ли другой лучший способ, о котором я не знаю.

Большое спасибо.

...