【问题标题】:C# Download a docx file via url id (no content-disposition)C# 通过 url id 下载 docx 文件(无内容处置)
【发布时间】:2016-06-03 14:15:34
【问题描述】:

我花了大约 3-4 天时间通过堆栈溢出和谷歌搜索引擎对此进行调查。

我的困境是: 我的任务是在 Visual Studio 2015 的 Windows 窗体中显示来自 url 的文件(不确定我是否可以简单地打开它或必须将其保存到文件夹中)。有问题的链接是这个,但由于这个原因无法工作只能通过内部网络或连接的 VPN 访问: http://QualityWorkbench/ivscripts/qwbcgi.dll/docfetch?db=live&id=1090

到目前为止,我已经完成的是,我已经基于此链接构建了 windows 窗体部分,该链接来自一个指向博客链接的堆栈溢出文章:

How to display PDF or Word's DOC/DOCX inside WinForms window?

我构建的内容非常相似,适用于在 url 中具有文件名但不适用于上面提到的 Quality Workbench 链接的链接。一个例子是这样的: http://www.e-iceblue.com/images/test.docx

我到处研究过,各种堆栈溢出文章都谈到了通过 HttpWebResponse 标头检查内容处置,但是当我通过它进行调试时,我看到的唯一标头是这些(与内容处置无关):

标题名称:内容长度,值:411

标题名称:内容类型,值:文本/html

标头名称:Set-Cookie,值:IGS_SessionID=53114;路径=/;过期=格林威治标准时间 2016 年 6 月 3 日星期五 14:01:34,会话 ID=2d794a41-43ce-4c6b-96cc-7a832ac39670;路径=/;过期=格林威治标准时间 2016 年 6 月 3 日星期五 14:01:34

标头名称:服务器,值:Microsoft-IIS/7.5

标题名称:X-Powered-By,值:ASP.NET

我知道我列出的内容非常模糊,因此我很乐意提供任何编码细节或任何人需要破译我的困境的任何信息:如何使用 Visual 从仅以 id 结尾的 url 下载文件工作室 2015 C#。理想情况下打开文件而不保存它并将其显示到窗口形式是我的理想,但我也满足于将文件保存到用户下载文件夹中。

【问题讨论】:

  • 您是否尝试过通过 fiddler 等代理打开网址?这将帮助您了解到底发生了什么。您提到 Content-Type 是 text/html。如果您希望使用 .docx,则内容类型应为 application/vnd.openxmlformats-officedocument.wordprocessingml.document 我的猜测是您使用的网址不正确。
  • 我没有。我不知道提琴手是什么,尽管我会查一下。至于1090链接。它确实提供了一个文件。在工作网络上(无论是在办公室还是 VPN)上,IE 上都会提示我打开、保存或另存为文件。打开它会打开 word 并保存它会提示我将其另存为 word docx 文件。此链接在我们的培训经理网站上有效。目前我们的工人点击它并被提示用word打开它。我的任务是将它包含在一个窗口窗体中。不幸的是,我无法更改这些链接的创建或定义方式。我得到的已经存在了。

标签: c# file url download httpwebresponse


【解决方案1】:

首先,您需要确保您使用的 URL 确实为您提供了文件;正如 Hintham 在他/她的评论中所建议的那样,您收到的不是 docx 文件。

其次,在您的代码中,您需要向 URL 发出 HTTP 请求以获取文件。好的做法是捕获传输和/或 HTTP 错误。如果在请求期间没有发生 HTTP 错误,则响应中将包含该文件。

(在我看来)最简单的方法是联系WebClient.DownloadData。它会将文件检索到一个字节数组中,以便您可以将其用于显示您的 WinForms 应用程序。看看MSDN documentation - 它非常简单。

【讨论】:

  • @bozhidarstinev - 我遵循了您推荐的 MSDN 文档并使用了其中的一个示例。它确实回答了为什么内容类型是 html/text 而不是 application/vnd.openxmlformats-officedocument.wordprocessingml.document。显然返回的数据是一个简单的 html 文件(我假设)然后再次调用链接以打开、保存、另存为 word 文件。
  • @vegeto18 - 正确。 MSDN 无法回答这个问题;也没有任何客户端技术。这就是我所说的“你需要确保你使用的 URL 确实提供了一个文件”的意思。尝试在浏览器的地址栏中输入您的链接,看看会发生什么...
  • @bozhidarstinev - 在 IE 上通过 VPN(或当我在办公室时)使用工作凭证时,窗口是空白的,但我会提示我想用“docfetchraw.docx”做什么从 qualityworkbench 打开、保存或另存为。从 VPN 断开连接后,我被带到一个 html 站点,上面说 qualityworkbench 页面正在构建中。这是否意味着它会从那里通过隧道连接到存放文档的实际服务器?
  • 没错!最有可能的是,当您连接到上述 VPN 时,VPN 服务器端的 DNS 会识别 qualityworkbench 并将其转换为正确的 IP 地址。从那里一切都是桃子。但是,当您没有连接到 VPN 时,您的 ISP 或其他一些 DNS 会拦截对 qualityworkbench 的请求 - Internet 上不存在的主机名 - 并通过将 HTML 页面返回给您来提供购买它。真的很烦人,但它发生了。我也打了好多次。无论如何,我很高兴你知道了......
【解决方案2】:

@bozhidarstoinev - 在休息了很长时间后,我回顾了您提供的内容,然后在 IE 上查看了链接的 html 源代码。就像您说的那样,该链接引用了一个包含真实 URL 下载链接的 html 站点。由于疲劳,我第一次没有抓住它,但真正的 url 下载链接的名称与我在问题中提供的名称相似,只是添加了 3 个字符。

感谢您让我走上正确的道路!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多