通过HTTP简单下载文件 - 这是否足够?

时间:2010-11-02 09:18:28

标签: c# http download

我的app中需要基本的文件下载功能,我无法使用WebClient.DownloadFile [1]。这个(天真?)的DownloadFile方法的实现是否足够?我没有解决这个实现的任何陷阱吗?

public static void DownloadFile(String url, String destination)
{
    using (var request = (HttpWebRequest)WebRequest.Create(url))
    {
        request.Method = "GET";
        request.Timeout = 100000; // 100 seconds

        using (var response = request.GetResponse())
        {
            using (var responseStream = response.GetResponseStream())
            {
                using (var fileStream = File.Open(destination,
                                                  FileMode.Create,
                                                  FileAccess.Write,
                                                  FileShare.None))
                {
                    var MaxBytesToRead = 10 * 1024;
                    var buffer = new Byte[MaxBytesToRead];
                    var totalBytesRead = 0;
                    var bytesRead = responseStream.Read(buffer,
                                                        0,
                                                        MaxBytesToRead);

                    while (bytesRead > 0)
                    {
                        totalBytesRead += bytesRead;
                        fileStream.Write(buffer, 0, bytesRead);
                        bytesRead = responseStream.Read(buffer,
                                                        0,
                                                        MaxBytesToRead);
                    }
                }
            }
        }
    }
}

谢谢!

[1] .Net Compact Framework ...

2 个答案:

答案 0 :(得分:1)

响应应具有Content-Length标头(除非content-encoding = chunked),您可以使用它来验证下载是否未中断。

除此之外,我的实现看起来还不错。

答案 1 :(得分:1)

您正在跟踪totalBytesRead,但我无法在任何地方看到它。

由于Method = "GET"是默认值,因此我看不到任何特定于HTTP的内容。如果您删除了(HttpWebRequest)广告和Method =行,那么您将能够通过其他协议(如FTP)下载。目前,如果有人提供 http:// 以外的URL,代码将抛出异常。