Я использую Symfony2 Framework и использую следующий код для экспорта XML-файла:
$response->setStatusCode(200); $response->headers->set('Content-Type', 'application/xml'); $response->headers->set('Content-Description', 'Submissions Export'); $response->headers->set('Content-Disposition', 'attachment; filename="' . $filename .'"'); $response->headers->set('Content-Transfer-Encoding', 'binary'); $response->headers->set('Pragma', 'no-cache'); $response->headers->set('Expires', '0');
Я неважно, беру ли я «Content-Transfer-Encoding» или «Pragma» или все из них, кроме «Content-Type» и «Content-Disposition». Результат в Chrome всегда: «filename-, attachment» (без «). В Firefox это прекрасно работает.
Так, например, если у меня есть файл с именем home.xml, Firefox будет загружать home.xml, тогда как Chrome предоставит мне home.xml-, attachment.
Я знаю, что это довольно старая дискуссия, но если кто-то обратится за помощью к этому, я решил, что хром, похоже, хочет найти точку с запятой в конце имени файла, а затем он счастлив. Как и в (VBScript):
Response.AddHeader "Content-Disposition", "attachment;filename=Something.xls;"
Это исправило это для меня. -Dave
У меня была такая же проблема в ZEND, потому что я нашел много нерабочих материалов, которые хотел добавить к этому сообщению своего андерсера. Поскольку мне потребовалось некоторое время, чтобы решить проблему, подумали, что больше пользователей и разработчиков захочет узнать, как я ее решил. Я добавляю это прямо перед моим вызовом fopen.
header('Content-Disposition: attachment; filename='.time().'.csv');
Решил проблему для меня. Прежде, чем я использовал контекст, переключился на то, что было ошибкой, но теперь оно работает как прелесть. Не забудьте удалить предыдущие заголовки содержимого, поэтому вы можете получить двойную ошибку заголовка.