Получение имени бинарного файла перед загрузкой в ​​C # - PullRequest
0 голосов
/ 20 октября 2011

Сначала позвольте мне описать ситуацию.Мое приложение в C # запрашивает у сервера PHP самое новое обновление.Он использует свой URL и простые атрибуты POST, такие как: 127.0.0.1/update.php?ver=0.2, сервер отвечает 404, если никогда не бывает версии, чем 0.2, и 200 OK, когда есть более новая версия, и начинает отправку двоичного файлав MIME-типе: октет-поток.

У меня нет проблем с получением этого файла, но у меня проблемы с получением его имени файла.

С этим кодом:

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

Я должен указать свое имя файла , но что, если я хочу, чтобы в качестве файла на сервере было то же имя?Как я могу получить его перед загрузкой?

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Если вы используете OpenRead(), то вы можете увидеть, есть ли значение для webClient.ResponseHeaders["content-disposition"] и разобрать часть имени файла = "blah.blah".

Однако подавляющее большинство потоков в Интернете неУ него нет информации об имени файла, и при его отправке вы можете перезаписать расширение файла на основе типа содержимого, чтобы расширение файла соответствовало отображению на компьютере, на котором оно сохраняется.

1 голос
/ 20 октября 2011

Это невозможно напрямую, потому что WebClient предлагает высокоуровневую функциональность, которая не слишком хорошо подходит для таких сценариев.

Существует несколько подходов, которые вы можете использовать, но все они требуют измененийодин тип или другой.Вот пара:

  1. Функциональность можно разделить на две части: сделать один вызов (например, с помощью DownloadString), который сообщит вам, если есть обновление, и как его назвать, затем позвоните DownloadFile, чтобы получить само обновление, зная имя.
  2. Откажитесь от удобства DownloadFile и обработайте HTTP-запрос на более низком уровне;сделайте это так, чтобы вы могли прочитать заголовки HTTP-ответа и добавить заголовок (может быть любым, вы можете даже создать его, например, X-Save-Filename:), который скажет вам, каким должно быть имя файла.
...