Получение имени двоичного файла перед загрузкой в ​​C#

StackOverflow https://stackoverflow.com/questions/7835592

Вопрос

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

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

С этим кодом:

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

  1. Вы можете разделить функциональность на две части: сделать один вызов (например, с DownloadString) это говорит вам, есть ли обновление и каково его имя, тогда вызов DownloadFile Чтобы получить саму обновление, зная имя.
  2. Отказаться от удобства DownloadFile и обрабатывать HTTP -запрос на более низком уровне; Сделайте это так, чтобы вы смогли прочитать заголовки HTTP -ответа и добавить заголовок (может быть что угодно, вы даже можете сделать его, например, например, например, X-Save-Filename:) это говорит вам, каким должно быть имя файла.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top