Ottenere il nome del file binario prima di scaricare in c#
-
27-10-2019 - |
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?
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:
- È 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 chiamataDownloadFile
Per ottenere l'aggiornamento stesso, conoscendo il nome. - 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 EGX-Save-Filename:
) Questo ti dice quale dovrebbe essere il nome file.