如何获取文件的大小(托管在Web服务器上)

本文关键字:Web 服务器 何获取 获取 文件 | 更新日期: 2023-09-27 17:50:49

我正在使用WebClient类从web服务器下载。exe文件。下面是我用来下载文件的代码:

WebClient webClient = new WebClient();    
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
webClient.DownloadDataAsync(new Uri("http://www.blah.com/calc.exe")); 

我的应用程序有一个进度条,它在回调(webClient_DownloadProgressChanged)中更新:

private void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    progressBar.Value = (int)e.BytesReceived;
}

我遇到的问题是我必须动态地设置进度条的Maximum值。换句话说,在开始下载之前,我需要知道我正在下载的文件的大小。

是否有一种方法来获得文件的大小(下载之前)给定它的uri?

如何获取文件的大小(托管在Web服务器上)

尝试像这样设置最大大小为e.t allbytestreceive

private void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
     progressBar.Max = (int)e.TotalBytesToReceive;
    progressBar.Value = (int)e.BytesReceived;
}

其中一种方法是检查ResponseHeaders中的Content-Length或Range header。

// To set the range
//webClient.Headers.Add("Range","bytes=-128");
// To read Content-Length
var bytes = Convert.ToInt64(webClient.ResponseHeaders["Content-Length"]);

如果您只需要正确更新进度条,最简单的方法是使用ProgressPercentage

// progressBar.Max is always set to 100
progressBar.Value = e.ProgressPercentage;