Вы здесь

Как запустить скачивание файла при сабмите формы ?

0

У меня есть форма с кнопкой, по нажатию на которую осуществляется сабмит.
И есть файл с именем 'sites/default/files/tmp/my_doc.docx'
Мне нужно сделать, чтобы при сабмите формы файл скачивался в браузере.

Пытаюсь сделать это таким образом

public function submitForm(array &$form, FormStateInterface $form_state){
   $filename = '/sites/default/files/tmp/my_doc.docx';
   $response = new BinaryFileResponse($filename);
   $form_state->setResponse($response);
}

Файл скачивается с правильным содержанием, но не как my_doc.docx, а с именем, таким же, как имя php-файла, где описана данная форма и выполняется данный скрипт.

Скажите пожалуйста, как сделать, чтобы файл скачивался с тем же именем, с которым находится на сервере ?

P.S. Исчерпывающий ответ нагуглить не удалось.

Версия Drupal: 
8.x
Категория: 
File API
Вопрос задан 07.09.2017 - 20:12

Ответы

0

В общем, благодаря наводке xandeadx и доработке кода, ссылку на который он дал, удалось решить эту задачу для формы. Код по ссылке возвращал файл с корректным названием, но с пустым содержанием.

Будет работать следующий код.

            $response = new BinaryFileResponse($filename);
            $response->setContentDisposition('attachment', basename($filename));
            $form_state->setResponse($response);

Где $filename - файл, который требуется скачать, с указанием пути. Например, 'sites/default/files/tmp/my_doc.doc'

Ответ дан 07.09.2017 - 21:48