【问题标题】:Download URL Content-Disposition excel file using C#使用 C# 下载 URL Content-Disposition excel 文件
【发布时间】:2018-08-19 10:58:14
【问题描述】:

我需要使用 C# 下载附加到 URL 的文件,并且我已经编写了这段代码:

var uri = new Uri("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0");
            var request = WebRequest.CreateHttp(uri);
            var response = request.GetResponse();
            string disposition = response.Headers["Content-Disposition"];

            string filename = disposition.Substring(disposition.IndexOf("filename=") + 9).Replace("\"", "");

            using (var fs = new FileStream(filename.Replace("/", "-"), FileMode.Create, FileAccess.Write, FileShare.None))
            {
                response.GetResponseStream().CopyTo(fs);
            }

但是路径中保存的excel文件好像损坏了

【问题讨论】:

标签: c# httpwebrequest content-disposition


【解决方案1】:

我在尝试调用您的 URL 时收到了禁止回复。在我的示例中,我使用了一个工作正常的不同 URL。

var request = WebRequest.CreateHttp("http://spreadsheetpage.com/downloads/xl/king-james-bible.xlsm");
        var response = request.GetResponse();

        using (var fs = new FileStream("king-james-bible.xlsm", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            using (var stream = response.GetResponseStream())
            {
                stream.CopyTo(fs);
            }
        }

会不会是你自己检索的文件损坏了?

根据新信息更新

好的,该链接现在对我有用。您的问题是 Excel 文件是使用 gzip 编码发送的。下面的代码示例适用于您的 URL。

var request = WebRequest.CreateHttp("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0");//"http://spreadsheetpage.com/downloads/xl/king-james-bible.xlsm");
        var response = request.GetResponse();
        string disposition = response.Headers["Content-Disposition"];

        string filename = disposition.Substring(disposition.IndexOf("filename=") + 9).Replace("\"", "");

        using (var fs = new FileStream(filename.Replace("/", "-"), FileMode.Create, FileAccess.Write, FileShare.None))
        {
            using (var stream = response.GetResponseStream())
            {
                using (GZipStream zipStream = new GZipStream(stream, CompressionMode.Decompress))
                {
                    byte[] tempBytes = new byte[4096];
                    int i;
                    while ((i = zipStream.Read(tempBytes, 0, tempBytes.Length)) != 0)
                    {
                        fs.Write(tempBytes, 0, i);
                    }
                }
            }
        }

我已使用这篇文章中的信息进行 gzip 解码:How do you download and extract a gzipped file with C#?

【讨论】:

  • 其实我使用的网址并不是直接指向excel文件。它有一个附件,我从 Content-Disposition 标题信息中得到它的名字
  • @anmohammadi 我已根据您的输入更新了答案
  • @PaulHieltjes 最后我们需要拨打response.Close() 吗?
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 2023-03-08
  • 2019-12-19
相关资源
最近更新 更多