Existe alguma maneira de "espiar" em um arquivo enquanto ele está carregando o HTTP em uma caixa do Windows?

StackOverflow https://stackoverflow.com/questions/2479390

Pergunta

Preciso adicionar uma função de upload de arquivos a um site do ASP.NET e gostaria de poder ler uma pequena parte do arquivo no servidor enquanto ele ainda está enviando. Uma função do tipo de espiada ou visualização para que eu possa determinar o conteúdo e dar algum feedback ao usuário enquanto ele ainda está carregando (estamos falando de arquivos grandes aqui). Há alguma maneira de fazer isso? Estou pensando no pior caso de escrever um controle personalizado que envie apenas um número fixo de bytes do arquivo uma vez escolhido e, em seguida, sob as coberturas inicia outro upload do arquivo completo. Não tenho muita certeza, mesmo isso é possível, mas estou procurando uma solução mais elegante de qualquer maneira ... obrigado!

Foi útil?

Solução

Parece que você deseja evitar a "tela branca da morte" durante grandes uploads de arquivo. Nesse caso, você pode querer olhar para Controle de Raduload da Telerik , que fornece uma barra de progresso durante o upload.

Se você quiser rolar o seu próprio, descompilaria a cópia do teste para obter idéias. Eu espiei sua fonte dessa maneira e eles realizam a barra de progresso através de uma combinação de um httpmodule personalizado e httphandler junto com seu controle. O manipulador direciona o arquivo de maneira transmitida, enquanto o módulo fornece informações "percentuais completas"-ou o contrário; Faz alguns anos desde que eu olhei para ele.

Editar:

Na verdade, estou tentando fazer o processamento do lado do servidor, pois o arquivo ainda está sendo carregado. Quero importar dados do usuário via HTTP, mas quero apresentar ao usuário visualizar/opções de como processaremos seus dados enquanto o arquivo ainda está carregando (definições de coluna, etc.). Não importa o quê, vamos pegar o arquivo como está, para que o upload não precise ser interrompido. Dado que eu realmente quero interação durante o upload com base na leitura de uma parte relativamente pequena do arquivo à medida que ele está sendo carregado, você ainda recomendaria a mesma abordagem?

Bem ... seria muito difícil de fazer, e pode não funcionar transversal, mas poderia ser feito com essa abordagem.

Como é perfeitamente possível trabalhar com o arquivo de entrada como um fluxo, como mencionei, você pode atualizar seu processamento íntimo como parte desse processamento de fluxo. Se você não processar como um fluxo, precisará esperar o upload de arquivo completo antes de poder fazer qualquer coisa com ele.

O problema é o seguinte: durante o upload do arquivo, você não pode ter mais interação baseada em HTML. A postagem deve continuar inabalável ou o upload falhará. O controle que vinculei só funciona, porque a maioria dos navegadores permite que o JavaScript continue a executar e atualizar a página DOM durante a postagem.

Portanto, para fazer isso funcionar, você deve atualizar um lado padronizado de servidor estadual durante o processamento de arquivos no httpmodule, que é transmitido de volta ao cliente por meio de chamadas xmlHttPrequest tratadas pelo httphandler. Você precisa usar o JavaScript/DOM puro para atualizar a interface do usuário para o usuário.

Então, como eu disse, é complexo e provável de ser transversal de buggy, mas teoricamente pode ser feito.

Existem alernativas que podem ser mais estáveis, mas podem não ser necessariamente viáveis: você pode construir um controle ActiveX ou um aplicativo .NET de clique que pré-processos o arquivo antes de fazer upload e talvez até transferir assíncrono o arquivo enquanto o usuário continua navegando. Alguns usuários podem não gostar dessa opção, e eu não conheço os detalhes do seu cenário de implantação, mas é uma opção.

Outras dicas

Há um HTTP HEAD método, mas não PEEK.

HEAD fornecerá informações e cabeçalhos sobre o arquivo.

Claro que você pode fazer um manipulador de solicitação especial que faça o que quiser. Você não precisa trabalhar com recursos estáticos, pode criar dinamicamente qualquer resposta desejada.

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