comprimento arquivo de download IIS7
-
06-07-2019 - |
Pergunta
Eu tenho seguinte código para download de arquivos:
FileInfo fileInfo = new FileInfo(filePath);
context.Response.Clear();
context.Response.ContentType = "application/octet-stream";
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + System.IO.Path.GetFileName(filePath));
context.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
context.Response.WriteFile(filePath);
context.Response.End();
Quando eu executá-lo no meu IIS6 local, ele funciona bem. browser (testado no IE8, Firefox 3.5.2, o Opera 10) mostra o comprimento da lima antes de eu começar a baixar o arquivo.
Quando eu executar esse código no IIS7 remoto, navegador web não mostra tamanho do arquivo. tamanho do arquivo é desconhecido.
Por que eu não entendo tamanho do arquivo quando esse código é executado sob IIS7?
Solução
Use Fiddler para verificar o que realmente é enviado. Meu palpite é que você está sendo fragmentada codificação como resultado de buffer a ser definida como falsa no servidor IIS7.
BTW, soltar o Response.End chamar seu uma coisa muito traumática para fazer e é desnecessário (para que o assunto assim é a chamada para Clear).
Editar
Estritamente falando ao transmitir conteúdo com codificação fragmentada (o que é desejável em seu cenário) o cabeçalho Content-Length não deve estar presente (ver Seção RFC2616 4,4 .) parece-me que IIS7 se encarrega de fazer cumprir isso. Na verdade eu tive um cenário Classic-ASP no qual IIS7 lança um erro quando tenta código COM para adicionar um cabeçalho Content-Length quando o buffer está desligado.
Este é realmente chato, porque apesar do que o comitê nas torres de marfim gostaria, este cabeçalho dar ao usuário final uma peça muito útil de informações.
Outras dicas
Obrigado por este post .... Eu tenho que trabalhar para o IE com a primeira linha.
public void WriteCSV(string strData) { //Required for IIs7 WS2008R2 fix Response.ClearHeaders(); Response.Clear(); Response.Buffer = true; Response.ContentType = "application/csv"; Response.AddHeader("Content-Disposition", "attachment;filename=report.csv"); Response.Write(strData); Response.Flush(); Response.End(); }