C# 通过 url id 下载一个 docx 文件(没有 content-disposition)
C# Download a docx file via url id (no content-disposition)
我花了大约 3-4 天时间通过堆栈溢出和 google 搜索引擎对此进行调查。
我的困境是:
我的任务是在 Visual Studio 2015 的 windows 表单中显示来自 url 的文件(不确定我是否可以简单地打开它或必须将其保存到文件夹中)。link 有问题,但由于只能通过内部网络或连接的 VPN 访问,因此无法正常工作:
http://QualityWorkbench/ivscripts/qwbcgi.dll/docfetch?db=live&id=1090
到目前为止,我已经完成了 windows 表单部分的构建,该表单部分基于这篇 link 来自一篇导致博客 link 的堆栈溢出文章:
How to display PDF or Word's DOC/DOCX inside WinForms window?
我构建的内容非常相似,适用于文件名在 url 范围内但质量 Workbench link 的 links。一个例子是这样的:
http://www.e-iceblue.com/images/test.docx
我到处都进行了研究,各种堆栈溢出文章都在谈论通过 HttpWebResponse headers 检查内容处置,但是当我通过它进行调试时,我唯一看到的 headers 这些(与 content-disposition):
Header Name:Content-长度,值:411
Header Name:Content-类型,值:text/html
Header Name:Set-Cookie,值:IGS_SessionID=53114;路径=/; expires=2016 年 6 月 3 日,星期五 14:01:34 GMT,sessionid=2d794a41-43ce-4c6b-96cc-7a832ac39670;路径=/; expires=2016 年 6 月 3 日,星期五 14:01:34 GMT
Header Name:Server,值:Microsoft-IIS/7.5
Header Name:X-Powered-By, 值:ASP.NET
我知道我列出的内容非常模糊,所以我很乐意提供任何编码细节或任何人需要破译我的困境的任何信息:如何从 url 下载文件使用 Visual Studio 2015 C# 以 id 结尾。理想情况下打开文件而不保存它并将其显示为 window 形式是我的理想,但我也满足于将文件保存到用户下载文件夹中。
首先,您需要确定您使用的URL确实为您提供了一个文件;正如 Hintham 在 his/hers 评论中所建议的那样,您收到的不是 docx 文件。
其次,在您的代码中,您需要向 URL 发出 HTTP 请求以获取文件。好的做法是捕获传输 and/or HTTP 错误。如果在请求期间没有发生 HTTP 错误,则在响应中将有该文件。
最简单的方法(在我看来)是与 WebClient.DownloadData
互动。它会将文件检索到一个字节数组中,这样您就可以将它提供给您的 WinForms 应用程序进行显示。看看 MSDN documentation - 它非常简单。
@bozhidarstoinev - 在休息了很长时间并重新开始之后,我查看了您提供的内容,然后在 IE 上查看了 link 的 html 源代码。正如您所说,link 引用了一个 html 站点,其中包含真正的 URL 下载 link。由于疲劳,我第一次没有抓住它,但真正的 url 下载 link 与我在我的问题中提供的名称相似,添加了 3 个字符。
感谢您让我走上了正确的道路!
我花了大约 3-4 天时间通过堆栈溢出和 google 搜索引擎对此进行调查。
我的困境是: 我的任务是在 Visual Studio 2015 的 windows 表单中显示来自 url 的文件(不确定我是否可以简单地打开它或必须将其保存到文件夹中)。link 有问题,但由于只能通过内部网络或连接的 VPN 访问,因此无法正常工作: http://QualityWorkbench/ivscripts/qwbcgi.dll/docfetch?db=live&id=1090
到目前为止,我已经完成了 windows 表单部分的构建,该表单部分基于这篇 link 来自一篇导致博客 link 的堆栈溢出文章:
How to display PDF or Word's DOC/DOCX inside WinForms window?
我构建的内容非常相似,适用于文件名在 url 范围内但质量 Workbench link 的 links。一个例子是这样的: http://www.e-iceblue.com/images/test.docx
我到处都进行了研究,各种堆栈溢出文章都在谈论通过 HttpWebResponse headers 检查内容处置,但是当我通过它进行调试时,我唯一看到的 headers 这些(与 content-disposition):
Header Name:Content-长度,值:411
Header Name:Content-类型,值:text/html
Header Name:Set-Cookie,值:IGS_SessionID=53114;路径=/; expires=2016 年 6 月 3 日,星期五 14:01:34 GMT,sessionid=2d794a41-43ce-4c6b-96cc-7a832ac39670;路径=/; expires=2016 年 6 月 3 日,星期五 14:01:34 GMT
Header Name:Server,值:Microsoft-IIS/7.5
Header Name:X-Powered-By, 值:ASP.NET
我知道我列出的内容非常模糊,所以我很乐意提供任何编码细节或任何人需要破译我的困境的任何信息:如何从 url 下载文件使用 Visual Studio 2015 C# 以 id 结尾。理想情况下打开文件而不保存它并将其显示为 window 形式是我的理想,但我也满足于将文件保存到用户下载文件夹中。
首先,您需要确定您使用的URL确实为您提供了一个文件;正如 Hintham 在 his/hers 评论中所建议的那样,您收到的不是 docx 文件。
其次,在您的代码中,您需要向 URL 发出 HTTP 请求以获取文件。好的做法是捕获传输 and/or HTTP 错误。如果在请求期间没有发生 HTTP 错误,则在响应中将有该文件。
最简单的方法(在我看来)是与 WebClient.DownloadData
互动。它会将文件检索到一个字节数组中,这样您就可以将它提供给您的 WinForms 应用程序进行显示。看看 MSDN documentation - 它非常简单。
@bozhidarstoinev - 在休息了很长时间并重新开始之后,我查看了您提供的内容,然后在 IE 上查看了 link 的 html 源代码。正如您所说,link 引用了一个 html 站点,其中包含真正的 URL 下载 link。由于疲劳,我第一次没有抓住它,但真正的 url 下载 link 与我在我的问题中提供的名称相似,添加了 3 个字符。
感谢您让我走上了正确的道路!