Obtenir le nom du fichier binaire avant de les télécharger en C #
-
27-10-2019 - |
Question
Tout d'abord permettez-moi de décrire la situation. Mon application en C # demande au serveur PHP pour la nouvelle mise à jour. Il utilise son URL et un simple POST attributs tels que: 127.0.0.1/update.php?ver=0.2, les serveurs avec répond 404 s'il n'y a pas jamais la version de 0,2 et 200 OK quand il y a une version plus récente et commence à envoyer le fichier binaire en type MIME: octet-stream.
Je n'ai aucun problème avec obtenir ce dossier, mais je vais avoir des problèmes avec obtenir son nom de fichier.
Avec ce code:
WebClient webClient = new WebClient();
webClient.DownloadFile("http://127.0.0.1/update.php?ver=0.2", filename);
Je dois mettre mon nom mais si je le veux avoir le nom même que le fichier sur le serveur? Comment puis-je obtenir avant de le télécharger?
La solution
Si vous utilisez OpenRead()
vous pouvez voir s'il y a une valeur pour webClient.ResponseHeaders["content-disposition"]
et analyser le nom de fichier = partie « blah.blah ».
Cependant, la grande majorité des cours d'eau sur le web ne disposait pas d'informations de nom de fichier, et quand il est envoyé, vous voudrez peut-être ré-écrire l'extension de fichier basé sur le type de contenu afin que l'extension de fichier correspond à la mise en correspondance sur la machine, il est en cours de la sauvegarde.
Autres conseils
Ce n'est pas directement possible car offres WebClient
fonctionnalité de haut niveau qui ne se prête pas trop à ces scénarios.
Il existe plusieurs approches que vous pouvez prendre, mais ils ont tous besoin de changements d'un type ou un autre. Voici quelques:
- Vous pouvez diviser la fonctionnalité en deux parties: faire un appel (par exemple avec
DownloadString
) qui vous indique si une mise à jour et que son nom est, puis appelDownloadFile
pour obtenir la mise à jour elle-même, connaître le nom. - renoncer à la commodité de
DownloadFile
et traiter la requête HTTP à un niveau inférieur; faire cela pour que vous serez en mesure de lire les en-têtes de réponse HTTP, et ajouter un en-tête (peut être quelque chose, vous pouvez même faire une place comme par exempleX-Save-Filename:
) qui vous indique ce que le nom du fichier doit être.