Symfony 5 — Загрузка файлов, загруженных с помощью vich

#symfony

#symfony

Вопрос:

После добавления функциональности загружайте файл или много файлов благодаря пакету «vich», я бы загрузил файл, который загрузил. Мои файлы сохраняются в папке загрузки, созданной в корневой папке.

У меня есть этот код, но ошибка с надписью «файл не найден»..

 <a download class="btn btn-info btn-sm" href="{{'upload/' ~ document.image }}"><i class="fas fa-file-download"></i> {{ document.image }} </a>
  

Комментарии:

1. и вы имеете в виду «корневую папку»… корень symfony, в котором находятся src, config и т.д.? поскольку извне легко доступны только каталоги в public/ , все остальное должно доставляться контроллером. поэтому я бы посоветовал вам переместить каталог загрузки в общий каталог. однако, если вы хотите добавить контроль доступа, вам следует создать контроллер, который доставляет файл.

2. да, точно. Итак, я должен создать новую функцию на контроллере для

Ответ №1:

Чтобы загрузить файл при использовании пакета Vich uploader bundle, вам необходимо создать функцию внутри вашего класса контроллера и вызвать ее из вашего шаблона.

Например:

 use SymfonyBundleFrameworkBundleControllerAbstractController;
use VichUploaderBundleHandlerDownloadHandler;

class MyController extends AbstractController
{
    /**
     * @Route(...)
     *
     * @param Document        $document        The document to download
     * @param DownloadHandler $downloadHandler Handler
     *
     * @return Response
     */
    public function downloadDocument(Document $document, DownloadHandler $downloadHandler): Response
    {
        return $downloadHandler->downloadObject($document, 'documentFile');
    }
}
  

Для получения дополнительной информации см. VichUploaderBundle serving_files_with_a_controller

Комментарии:

1. маршрут в случае OP, вероятно, /upload/{filepath}