"Download Link" falha no IE
-
22-09-2019 - |
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.
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.