Документы создаются системой и сохраняются в папке / веб-загрузке. Я создал представление для отображения ссылок, которые позволят пользователю загружать файлы, если пользователь нажимает ссылки. (стандартная кнопка для загрузки)
Я новичок в Symfony2 и обошел всю концепцию маршрутизации / контроллера, но как создать ссылку на такие файлы, все еще придерживаясь MVC? Нужно ли настраивать маршрутизацию с помощью контроллера или иметь ветку с функциями, которые позволяют это и т. Д.
PS: Я прочитал такие вопросы, как Как создать ссылку для загрузки в 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>
Он открывает файл, и у пользователя есть решение, если он хочет его распечатать, загрузить его и т. Д.