使用.net提供类向http发请求
以流式响应,能直接得到流大小,并显示下载页面进度与完成百分比
我想对下步学习下载文件或异步多线和下载很有帮助
public long DownloadFile(string FileURL, string FileSavePath)
{
long Filelength = 0;
long ThisLength = 0;
HttpWebRequest req = HttpWebRequest.Create(FileURL) as HttpWebRequest;
req.Timeout = 10 * 1000;
req.AllowAutoRedirect = true;
label1.Text = "=> 正在检测 " + FileSavePath + "...";
try
{
HttpWebResponse res = req.GetResponse() as HttpWebResponse;
System.IO.Stream stream = res.GetResponseStream();
Filelength = res.ContentLength;
progressBar1.Maximum = (int)Filelength;
int allk = (int)(Filelength / 1024);
label1.Text = "=> 正在下载 " + FileSavePath + "...";
byte[] b = new byte[1024];
int nReadSize = 0;
nReadSize = stream.Read(b, 0, 1024);
System.IO.FileStream fs = System.IO.File.Create(FileSavePath);
try
{
while (nReadSize > 0)
{
label1.Refresh();
progressBar1.Value += nReadSize;
ThisLength += nReadSize;
label1.Text = "=> 正在下载 " + FileSavePath + "(" + (int)(ThisLength / 1024) + "K/" + allk + "K)";
fs.Write(b, 0, nReadSize);
nReadSize = stream.Read(b, 0, 1024);
}
}
finally
{
fs.Close();
}
//progressBar1.Value = 0;
//progressBar1.Maximum = 0;
label1.Text = "完成下载" + FileSavePath + "(" + (int)(ThisLength / 1024) + "K/" + allk + "K)";
res.Close();
stream.Close();
}
catch (Exception er)
{
throw er;
}
return Filelength;
}
private void button1_Click(object sender, EventArgs e)
{
DownloadFile(textBox1.Text,"123.html");
}