Подтвердить что ты не робот

Загрузите исходное имя файла при загрузке с помощью WebClient

Есть ли способ узнать исходное имя загружаемого файла с помощью WebClient, когда Uri не содержит имя?

Это происходит, например, на сайтах, где загрузка происходит с динамической страницы, где имя неизвестно заранее.

Используя мой браузер, файл получает правильное имя. Но как это можно сделать с помощью WebClient? Например.

        WebClient wc= new WebClient();
        var data=   wc.DownloadData(@"www.sometime.com\getfile?id=123");

Использование DownloadFile() не является решением, так как для этого метода требуется имя файла заранее.

4b9b3361

Ответ 1

Вам нужно изучить заголовки ответов и посмотреть, есть ли заголовок содержания, который содержит фактическое имя файла.

WebClient wc = new WebClient();
var data=   wc.DownloadData(@"www.sometime.com\getfile?id=123");
string fileName = "";

// Try to extract the filename from the Content-Disposition header
if (!String.IsNullOrEmpty(wc.ResponseHeaders["Content-Disposition"]))
{
 fileName = wc.ResponseHeaders["Content-Disposition"].Substring(wc.ResponseHeaders["Content-Disposition"].IndexOf("filename=") + 9).Replace("\"", "");
}

Ответ 2

Прочитайте заголовок ответа "Content-Disposition" с помощью WebClient.ResponseHeaders

Это должно быть:

    Content-Disposition: attachment; filename="fname.ext"

ваш код должен выглядеть так:

string header = wc.ResponseHeaders["Content-Disposition"]??string.Empty;
const string filename="filename=";
int index = header.LastIndexOf(filename,StringComparison.OrdinalIgnoreCase);
if (index > -1)
{
    fileName = header.Substring(index+filename.Length);
}