Как создать ссылку для загрузки сгенерированных документов в symfony2?

Документы создаются системой и сохраняются в папке / веб-загрузке. Я создал представление для отображения ссылок, которые позволят пользователю загружать файлы, если пользователь нажимает ссылки. (стандартная кнопка для загрузки)

Я новичок в Symfony2 и обошел всю концепцию маршрутизации / контроллера, но как создать ссылку на такие файлы, все еще придерживаясь MVC? Нужно ли настраивать маршрутизацию с помощью контроллера или иметь ветку с функциями, которые позволяют это и т. Д.

PS: Я прочитал такие вопросы, как Как создать ссылку для загрузки в Symfony2? но я не понимаю, что они сделали что-то в маршрутизации или просто добавили ссылки и т. д.

Спасибо,

Related of "Как создать ссылку для загрузки сгенерированных документов в symfony2?"

Давайте сделаем образец.

Скажите, что ваш проект живет в / www /, так / www / web / является корнем документа вашего приложения symfony2. Теперь все, к чему вы пытаетесь получить доступ, находится в / www / web / через http: // server / .

/www/web/downloads/file.zip будет доступен по адресу http: //server/downloads/file.zip по умолчанию.

Пример внедрения будет,

Создайте маршрут,

download_route: pattern: /download/{filename} defaults: { _controller: YourBundle:Controller:download } 

И затем в вашем контроллере,

 public function downloadAction($filename) { $request = $this->get('request'); $path = $this->get('kernel')->getRootDir(). "/../web/downloads/"; $content = file_get_contents($path.$filename); $response = new Response(); //set headers $response->headers->set('Content-Type', 'mime/type'); $response->headers->set('Content-Disposition', 'attachment;filename="'.$filename); $response->setContent($content); return $response; } 

Для генерации ссылки на ссылку загрузки. Создание раздела URL-адресов документа.

Это лучшее решение, с которым я дошел до сих пор, он позволяет загружать файлы из-за пределов вашей папки «/ var / www / web /», что делает файл недоступным без запуска этого скрипта, используемого для работы с файлом.

Таким образом, вы можете проверить, есть ли у загрузчика разрешение на загрузку файла, который он хочет.

В этом примере я использовал «/ var / www / downloads /», где я храню все файлы, которые я хочу использовать в качестве загрузки:

 /** * http://api.symfony.com/2.2/Symfony/Component/HttpFoundation/BinaryFileResponse.html */ use Symfony\Component\HttpFoundation\BinaryFileResponse; class OfflineToolController extends Controller { /** * @return BinaryFileResponse */ public function downloadAction() { $path = $this->get('kernel')->getRootDir(). "/../downloads/"; $file = $path.'my_file.zip'; // Path to the file on the server $response = new BinaryFileResponse($file); // Give the file a name: $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT,'my_file_name.zip'); return $response; } } 

source: docs: http://symfony.com/doc/current/components/http_foundation/introduction.html

(должен работать над версиями выше 2.2)

Просто добавление пути файла к href не сработало для меня.

Когда вы нажимаете, он просто отображает файл, не загружая его.

Что работало для меня, хотя добавляет атрибут download к моей ссылке, которая является атрибутом HTML5. Просто добавьте атрибут так:

 <a href="path/to/file" download>Download Link</a> 

При щелчке по ссылке он просто загрузит файл без кода на стороне сервера.

Вы также можете присвоить значение атрибуту download .

 <a href="path/to/file" download="filename.txt">Download Link</a> 

Значение атрибута download будет использоваться в качестве имени файла загруженного файла, а не того, который использовался при его хранении на сервере.

Я последовал за учебником на веб-сайте Symfony относительно обработки загрузки файлов. Мне было полезно, когда я выяснял, как создать ссылку для загрузки файла. Я просто добавил метод к объекту Document называемому getDownloadFileName() который просто возвращает имя файла, которое я хочу назначить атрибуту download .

Таким образом, в основном, это то, как я реализовал его в своем шаблоне twig для проекта Symfony

 <a href="{{ asset(file.webPath) }}" download="{{ file.downloadFileName }}"> Download Link </a> 

Не знаю, подходит ли это вам, но сохраните эту еще одну сверхпростую альтернативу:

т.е. на ваш взгляд:

 <a class='north' href="{{ asset('bundles/TP/Resume.pdf') }}" target="_blank" title="Download.pdf"><img src="{{ asset('bundles/TP/images/icn-save.jpg') }}" alt="Download the pdf version" /></a> 

Он открывает файл, и у пользователя есть решение, если он хочет его распечатать, загрузить его и т. Д.