【问题标题】:Getting Filename from virtual URL?从虚拟 URL 获取文件名?
【发布时间】:2011-12-02 13:17:27
【问题描述】:

我有一个类似“http://www.ti.com/lit/gpn/TPS767D318-Q1”的网址 这是最终路由到浏览器上的“http://www.ti.com/lit/ds/symlink/tps767d318-q1.pdf”的路径(呈现pdf文件)。我正在控制台应用程序中处理此 URL,以便获取您在我提供的第二个 URL 中看到的“pdf”文件名。

我检查了 httpresponse 对象中的 UriResponse.Absoluteuri 属性,它显示“http://focus.ti.com/general/docs/lit/getliterature.tsp?genericPartNumber=TPS767D318-Q1&fileType=pdf” 看起来这是一个嵌套的虚拟路径。任何人都可以帮助我在哪里可以到达最终 URL 以提取 pdf 文件名吗?我没有在响应对象的任何地方找到它。我还检查了响应标头,也没有任何内容。

任何帮助将不胜感激...谢谢

【问题讨论】:

    标签: asp.net url-rewriting httpwebrequest url-routing httpresponse


    【解决方案1】:

    事实证明,我的问题中的 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);
     }
    

    我从返回的 HTML 内容的元标记中获取最终 URL,并再次调用我的下载例程。

    【讨论】:

      【解决方案2】:

      查看Content-Disposition 标头,它可能类似于:Content-Disposition: attachment; filename=tps767d318-q1.pdf。这是从数据库、网络共享等获取和“下载”文件的 Web 服务的常用技术。

      【讨论】:

      • 是的,我检查过了...它没有文件名。响应中缺少“Content-Disposition”标头。奇怪的是...... ContentType 显示为“html”而不是“应用程序/PDF”。我想知道它是否甚至重定向到 pdf 文件!!?有什么想法吗?
      • 我会用 Firebug 或 Fiddler 之类的东西来监控请求/响应;正如 PlexQ 提到的,您可能会遇到服务器请求/响应对,因为它会将您重定向到服务器“位置”。
      【解决方案3】:

      不确定 ASP,但在协议级别,初始请求可能会导致另一端的应用程序/服务器发出重定向,因此您可以查看初始 HTTP 响应并检查它是否是重定向代码, 301、302 等。如果是这样,您可以按照 302 一直到 200,这是您可以用来检查文件名的最终 URL。

      【讨论】:

        猜你喜欢
        • 2010-10-10
        • 1970-01-01
        • 2019-04-30
        • 2017-11-17
        • 2021-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多