Intereting Posts
Laravel 4 не может запускать все RAW-запросы Получить первое слово в строке php the_title WordPress Неопределенная ошибка индекса при $ em-> clear () в Symfony2 Случайное фоновое изображение PHP Загрузка массива Javascript с данными базы данных MYSQL Некоторые электронные письма контактной формы не отправляются из-за фильтрации спама на хосте Проверьте, является ли пользователь root Инъекция зависимостей Laravel: когда вам нужно? Когда вы можете издеваться над фасадами? Преимущества любого метода? создать pdf-файл с tcpdf в magento TYPO3 6.1.7 новости подробности URL-адреса с параметрами получают на страницу 404 Почему Magento так медленно? error_get_last () возвращает NULL в PHP 7, когда установлен специальный обработчик исключений Как индексировать индексы массива? PHP Laravel: соединение не может быть выполнено, потому что целевая машина активно отказалась от него Процесс сигнализировался сигналом «9»,

Zend Framework 2 скачать файл

Я сделал форму для загрузки файлов в папку ./data/uploads с использованием Zend\Filter\File\RenameUpload .

Это работает как шарм. Моя проблема теперь в том, как я могу предоставить этот файл пользователям для загрузки?

Я думаю, что это будет что-то вроде:

$response->setContent(file_get_contents('./data/uploads/file.png'));

Но я хочу знать, что это лучший способ сделать это.

Благодаря @henrik для ответа, но в его ответе отсутствуют несколько важных заголовков. Будьте осторожны.

Полный стек заголовков:

 public function downloadAction() { $file = 'path/to/file'; $response = new \Zend\Http\Response\Stream(); $response->setStream(fopen($file, 'r')); $response->setStatusCode(200); $response->setStreamName(basename($file)); $headers = new \Zend\Http\Headers(); $headers->addHeaders(array( 'Content-Disposition' => 'attachment; filename="' . basename($file) .'"', 'Content-Type' => 'application/octet-stream', 'Content-Length' => filesize($file), 'Expires' => '@0', // @0, because zf2 parses date as string to \DateTime() object 'Cache-Control' => 'must-revalidate', 'Pragma' => 'public' )); $response->setHeaders($headers); return $response; } 

Для тех, кто сталкивается с этой нитью, ищет ответ, это решение, которое работает, и оно использует потоки!

 public function downloadAction() { $fileName = 'somefile'; $response = new \Zend\Http\Response\Stream(); $response->setStream(fopen($fileName, 'r')); $response->setStatusCode(200); $headers = new \Zend\Http\Headers(); $headers->addHeaderLine('Content-Type', 'whatever your content type is') ->addHeaderLine('Content-Disposition', 'attachment; filename="' . $fileName . '"') ->addHeaderLine('Content-Length', filesize($fileName)); $response->setHeaders($headers); return $response; } 

Найдено здесь: force загрузить с помощью zf2

Подробнее здесь: отправка потоковых ответов с помощью zend