Domanda

Inizialmente lasciami descrivere la situazione. La mia applicazione in C# chiede al server PHP il nuovo aggiornamento. Utilizza il suo URL e un semplice post di attributi come: 127.0.0.1/update.php?ver=0.2, il server risponde con 404 se non c'è mai versione di 0,2 e con 200 OK quando c'è una versione più recente e inizia a inviare il file binario In MIME-Type: Ottet-Stream.

Non ho problemi a ottenere questo file, ma ho problemi con il suo nome file.

Con questo codice:

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

Devo mettere il mio nome del file Ma cosa succede se voglio che abbia lo stesso nome del file sul server? Come posso ottenerlo prima di scaricarlo?

È stato utile?

Soluzione

Se usi OpenRead() allora puoi vedere se c'è un valore per webClient.ResponseHeaders["content-disposition"] e analizza la parte fileName = "blah.blah".

Tuttavia, la stragrande maggioranza dei flussi sul Web non ha informazioni sul nome file e quando viene inviata potresti voler riscrivere l'estensione del file in base al tipo di contenuto in modo che l'estensione del file corrisponda alla mappatura sulla macchina è essere salvato a.

Altri suggerimenti

Questo non è direttamente possibile perché WebClient Offre funzionalità di alto livello che non si presta troppo bene a tali scenari.

Esistono diversi approcci che potresti adottare, ma tutti richiedono cambiamenti di un tipo o di altro. Ecco un paio:

  1. È possibile dividere la funzionalità in due parti: fare una chiamata (ad es. DownloadString) che ti dice se c'è un aggiornamento e come si chiama, poi chiamata DownloadFile Per ottenere l'aggiornamento stesso, conoscendo il nome.
  2. Rinunciare alla comodità di DownloadFile e gestire la richiesta HTTP a un livello inferiore; Fallo in modo da poter leggere le intestazioni di risposta HTTP e aggiungere un'intestazione (può essere qualsiasi cosa, puoi persino inventarne uno come EG X-Save-Filename:) Questo ti dice quale dovrebbe essere il nome file.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top