2014-01-31 2 views
0

Я использую потоки для загрузки файла excel. Вы можете найти код нижеZF2 - Загрузить xls показать две пустые строки в загруженном листе

$response = new \Zend\Http\Response\Stream(); 
$response->setStream(fopen($myfile, 'r')); 
$response->setStatusCode(200); 

$headers = new \Zend\Http\Headers(); 
$headers->addHeaderLine("Content-Type: application/vnd.ms-excel; charset=UTF-8") 
     ->addHeaderLine('Content-Disposition', 'attachment; filename=my.xls') 
     ->addHeaderLine("Content-Transfer-Encoding: binary") 
     ->addHeaderLine('Content-Length', filesize($myfile)); 
$response->setHeaders($headers); 

Файл генерируется собственно, но когда тот же файл, я в жизнь пользователю загружать есть две пустые строки, приезжающие в загруженном файле Excel. Я изучал и думал, что это http-версия и строки заголовка, но я думаю, что это не потому, что если я попробую иначе, я получу две пустые строки в начале отчета Excel.

Обратите внимание: в начале содержимого нет свободного места.

Любая идея ?? почему это так?

ответ

1

Помните, что потоковый ответ действительно не обеспечивает контекст потока для клиента. Это просто buffers the stream internally и отправляет ответ за один раз.

Это, как говорится, я создал плагин контроллера для отправки вложений из пути к файлу или напрямую с двоичными данными, адресованными переменной. Это в моей общей библиотеке Soflomo\Common. У меня не было проблем, которые вы описали, и я использую some more headers than you do.

Сообщите мне, если эта часть кода работает для вас. Одно из отличий заключается в том, что размер исходного файла зависит от размера ответа. Я не уверен, так как это может привести к равнодушию с кэшированным потоковым ответом. Попробуйте просто захватить содержимое и сделайте strlen() на этом содержании.

+0

$ content = "hello"; $ response = $ this-> getResponse(); $ response-> setContent ($ content); $ response-> getHeaders() -> addHeaderLine ('Pragma', 'public') -> addHeaderLine ('Cache-control', 'must-revalidate, post-check = 0, pre-check = 0') -> addHeaderLine ('Cache-control', 'private') -> addHeaderLine ("Content-Type: application/vnd.ms-excel; charset = UTF-8") -> addHeaderLine ("Content-Transfer- Кодирование: двоичный ") -> addHeaderLine ('Content-Length', strlen ($ content)) -> addHeaderLine ('Content-Disposition', 'attachment; filename = my.xls'); – user269867

+0

в листе exccel также идет после двух пустых строк .... можете ли вы поделиться, как я могу отладить проблему. – user269867

+0

Вы можете попробовать сравнить два файла: один на вашем сервере и тот, который вы загружаете. Если есть какая-то разница, вы знаете, откуда она взялась. Легче отлаживать текстовые файлы, такие как простой .txt или более сопоставимый с excel, .csv. Excel - это двоичный формат, но проблема возникает и с. CSV-файлами? –

Смежные вопросы