Pergunta

Primeiro, deixe-me descrever a situação. Meu aplicativo em C # pede ao servidor PHP a atualização mais recente.Ele usa sua URL e atributos de POST simples como: 127.0.0.1/update.php?ver=0.2, o servidor responde com 404 se nunca houver uma versão que 0.2 e com 200 OK quando há uma versão mais recente e começa a enviar o arquivo binárioem mime-type: octet-stream.

Não tenho problemas para obter este arquivo, mas estou tendo problemas para obter seu nome de arquivo.

Com este código:

WebClient webClient = new WebClient();
webClient.DownloadFile("http://127.0.0.1/update.php?ver=0.2", filename);

Tenho que colocar meu nome do arquivo , mas e se eu quiser que ele tenha O MESMO NOME como o arquivo no servidor?Como posso obtê-lo antes de fazer o download?

Foi útil?

Solução

Se você usar OpenRead(), poderá ver se há um valor para webClient.ResponseHeaders["content-disposition"] e analisar a parte filename="blah.blah".

No entanto, a grande maioria dos streams na web não tem informações de nome de arquivo e, quando for enviado, você pode reescrever a extensão do arquivo com base no tipo de conteúdo para que a extensão do arquivo corresponda ao mapeamento nomáquina em que está sendo salvo.

Outras dicas

Isso não é diretamente possível porque WebClient oferece funcionalidade de alto nível que não se adapta muito bem a esses cenários.

Existem várias abordagens que você pode adotar, mas todas exigem alterações de um tipo ou outro.Aqui estão algumas:

  1. Você pode dividir a funcionalidade em duas partes: fazer uma chamada (por exemplo, com DownloadString) que informa se há uma atualização e qual é o seu nome, então chame DownloadFile para obter a atualização em si,saber o nome.
  2. Desista da conveniência de DownloadFile e manipule a solicitação HTTP em um nível inferior;faça isso para poder ler os cabeçalhos de resposta HTTP e adicionar um cabeçalho (pode ser qualquer coisa, você pode até mesmo inventar um como, por exemplo, X-Save-Filename:) que informa qual nome de arquivo deve ser.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top