【问题标题】:How to download a file from a URL using c#如何使用 c# 从 URL 下载文件
【发布时间】:2018-04-16 04:29:02
【问题描述】:

我想从以下地址下载一个 .xlsx 文件。 http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=1396-08-08

通过点击链接,浏览器会自动下载一个文件。我试图从这个代码下载文件:

using (var client = new WebClient())
{
      client.DownloadFile("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=1396-08-08", @"D:\Archive\1396-08-08.xlsx");
} 

但它会下载一个与第一步浏览器下载的文件不同的奇怪文件。

我也试过了:

System.Diagnostics.Process.Start(
"http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0");

但是这段代码有两个缺点:

1- 它会打开一个不需要的浏览器。

2- 我无法确定下载文件的任何路径或文件名。

我想通过点击上面的链接地址获得完全相同的文件。 如何下载我需要的文件?

【问题讨论】:

    标签: c# winforms download webclient


    【解决方案1】:

    Lasse Vågsæther Karlsen 是正确的。您的浏览器足够智能,可以解压缩文件,因为响应包含标题:

    content-encoding:"gzip"
    

    您可以使用此代码下载并解压缩文件(根据您的文件名、路径等进行相应调整)

    void Main()
    {
        using (var client = new WebClient())
        {
            client.Headers.Add("accept", "*/*");
            byte[] filedata = client.DownloadData("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=1396-08-08");
    
            using (MemoryStream ms = new MemoryStream(filedata))
            {    
                using (FileStream decompressedFileStream = File.Create("c:\\deleteme\\test.xlsx"))
                {
                    using (GZipStream decompressionStream = new GZipStream(ms, CompressionMode.Decompress))
                    {
                        decompressionStream.CopyTo(decompressedFileStream);
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 2023-02-02
      相关资源
      最近更新 更多