Pergunta

Eu estava tentando implementar um "link para download" e colocá -lo ao lado de uma da minha tabela de relatórios para que os usuários possam baixar um arquivo CSV e abrir com aplicativos como o Excel.

Os registros são gerados dinamicamente com base na consulta feita pelos usuários.

Então, em algum lugar do meu controlador, há algo como:

response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=xxx.csv'
return response.stream(dynamically_generated_csv, request=request)

Isso funciona no Firefox e Chrome, mas falha no IE.

Quando imprimir os cabeçalhos de resposta, descobri que vários cabeçalhos foram adicionados à minha resposta por Web2py: 'Expires', 'Cache-Control', etc ...

E quando eu removo o cabeçalho 'Controle de cache', fazendo o seguinte:

del response.headers['Cache-Control']

Funciona no IE.

Por isso, parece que o IE tem problemas para lidar com um arquivo para download com o 'Cache-Control' definido com determinado valor.

Agora, minha pergunta é:

  • Por que o Web2py adiciona esses cabeçalhos de resposta, implicitamente? E talvez sem uma maneira de desencadeá -lo?

  • Existe algum efeito colateral quando eu excluo o cabeçalho do 'controle de cache' dessa maneira?

Desde já, obrigado.

Foi útil?

Solução

Não tenho certeza de quais cabeçalhos de controle de cache estão sendo enviados, mas o IE tem um bug com arquivos baixados como você está experimentando.

Para o IE, você deve ativar o cache. Quando o IE carrega arquivos (por exemplo, arquivos do Excel), no Excel, ele os carrega no diretório do cache, portanto, se você não o cache, o Excel (ou seu outro aplicativo) não conseguirá carregar o arquivo.

Eric Law (MSFT) sobre o tópico: http://blogs.msdn.com/ieinternals/archive/2009/10/02/internet-explorer-cannot-download-over-https--no-cache.aspx

Atualizar: Se, no entanto, você quiser apenas forçar o download ... por exemplo, não o IE carregue o arquivo do Excel dentro da janela do IE ... Certifique -se de definir os cabeçalhos completos para o anexo.

//PHP style
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="downloaded.pdf"');

Outras dicas

O link de download está usando HTTPS (SSL)? Nesse caso, o IE não pode lidar com o download se estiver definido para ser armazenado em cache. Este é um problema conhecido com o IE.

Isso não responde à sua pergunta, mas resolve, espero, problema original.

Eu apenas adicionaria timestamp (algo único o suficiente) para consultar a sequência de links do arquivo CSV. Isso ajudou para mim.

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