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?

Était-ce utile?

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:

  1. 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 appel DownloadFile pour obtenir la mise à jour elle-même, connaître le nom.
  2. 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 exemple X-Save-Filename:) qui vous indique ce que le nom du fichier doit être.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top