Pergunta

Eu uso o Symfony2 Framework e uso o seguinte código para exportar um arquivo 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');

Não importa se tomo "codificação de transferência de conteúdo" ou "Pragma" ou todos eles, exceto "tipo de conteúdo" e "disposição de conteúdo". O resultado do Chrome é sempre: "nome do arquivo, anexo" (sem o "). No Firefox, isso funciona bem.

Por exemplo, se eu tiver um arquivo chamado home.xml firefox, baixará home.xml, enquanto o Chrome me dará o anexo home.xml-,.

Foi útil?

Solução

Sei que essa é uma discussão bastante antiga, mas se alguém chegar aqui procurando ajuda com isso, determinei que o Chrome parece querer um ponto e vírgula no final do nome do arquivo e depois é feliz. Como em (VBScript):

Response.AddHeader "Content-Disposition", "attachment;filename=Something.xls;"

Isso consertou para mim. -Dave

Outras dicas

Eu tive o mesmo problema em Zend, porque encontrei muitas coisas que não funcionavam que eu queria adicionar meu anwser a este post. Como demorei um pouco para resolvê -lo pensou que mais usuários e desenvolvedores desejavam saber como eu o resolvi. Eu acrescento isso pouco antes da minha chamada fope.

header('Content-Disposition: attachment; filename='.time().'.csv');

Resolveu o problema para mim. Antes de usar um contexto, o que era buggy, mas agora funciona como um charme. Não se esqueça de remover os cabeçalhos de disposição de conteúdo anteriores, portanto, você pode receber um erro de cabeçalho duplo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top