Получение имени файла из виртуального URL? - PullRequest
1 голос
/ 07 октября 2011

У меня есть URL вроде "http://www.ti.com/lit/gpn/TPS767D318-Q1" это путь, который в конечном итоге перенаправляется на "http://www.ti.com/lit/ds/symlink/tps767d318-q1.pdf" в браузере (рендеринг файла PDF). Я обрабатываю этот URL-адрес в консольном приложении, чтобы получить имя файла" pdf ", которое вы видите во втором указанном мной URL-адресе.

Я проверил свойство UriResponse.Absoluteuri в объекте httpresponse и оно говорит: "http://focus.ti.com/general/docs/lit/getliterature.tsp?genericPartNumber=TPS767D318-Q1&fileType=pdf" Похоже, это вложенный виртуальный путь. Кто-нибудь может помочь, где я могу получить в конце URL, чтобы извлечь имя файла PDF? я не нашел его нигде в объекте ответа. Я также проверил в заголовках ответа и ничего там тоже.

Любая помощь будет оценена ... Спасибо

Ответы [ 3 ]

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

Посмотрите на заголовок Content-Disposition, он может выглядеть примерно так: Content-Disposition: attachment; filename=tps767d318-q1.pdf. Это распространенный метод для веб-сервисов, которые извлекают и «загружают» файлы из базы данных, общих сетевых ресурсов и т. Д.

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

Оказывается, что URL в моем вопросе фактически возвращает HTML-контент и выполняет перенаправление «метатег». Поэтому мне пришлось сделать следующее:

var redirect = Regex.Match(new string(buffer, 0, count), @"\<meta(?=[^>]*http-equiv\W*refresh)[^>]*?content\s*\=[^=>]*url\s*\=\s*(?<Url>[^'"">]+)", RegexOptions.IgnoreCase | RegexOptions.Singleline);

if (redirect.Success)
{
    Uri uri = new Uri(new Uri(externalUrl, UriKind.Absolute), new Uri(redirect.Groups["Url"].Value, UriKind.RelativeOrAbsolute));
    return SaveUrlToTemporaryFile(uri.AbsoluteUri, needsFullDownload);
 }

Я получаю окончательный URL-адрес из метатегов из возвращенного содержимого HTML и снова вызываю процедуру загрузки.

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

Не уверен насчет ASP, но на уровне протокола первоначальный запрос может вызвать перенаправление приложения / сервера на другом конце, поэтому вы можете посмотреть исходный HTTP-ответ и проверить, является ли он кодом перенаправления, 301, 302 и т. Д. Если это так, вы можете следовать 302-м до тех пор, пока не наберете 200, и это последний URL, который вы можете использовать для проверки имени файла.

...