|
1、先上代码
public void DownloadFile(string URL, string filename, int i)
{
float percent = 0;
try
{
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValIDAtionCallback = (sender, certificate, chain, errors) => true;
System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
//不能下载的电脑,ContentLength此处一直返回0
long totalBytes = myrp.ContentLength;
System.IO.Stream st = myrp.GetResponseStream();
System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.Create);
long totalDownloadedByte = 0;
byte[] by = new byte[1024];
int osize = st.Read(by, 0, (int)by.Length);
while (osize > 0)
{
totalDownloadedByte = osize + totalDownloadedByte;
System.Windows.Forms.Application.DoEvents();
so.Write(by, 0, osize);
osize = st.Read(by, 0, (int)by.Length);
percent = (float)totalDownloadedByte / (float)totalBytes * 100;
this.dataGridView1.Rows[i].Cells["Column5"].Value = percent.ToString() + "%";
System.Windows.Forms.Application.DoEvents(); //必须加注这句代码,否则label1将因为循环执行太快而来不及显示信息
}
so.Close();
st.Close();
}
catch (System.Exception ex)
{
Console.WriteLine("下载异常:" + ex.Message.ToString() + "异常路径:" + filename + "异常地址:" + URL);
MessageBox.Show("下载失败:原因:"+ex.Message.ToString()+ex.TargetSite.ToString());
}
}
2、问题描述:用上述方法通过远程地址下载视频文件,在我电脑使用正常,但是软件打包后,发给客户,部分客户使用正常,部分无法下载,经过排查,不能使用的人在调用此方法下载时候,myrp.ContentLength一直为0,导致了视频无法下载,现在的问题是部分电脑可以,部分电脑不可以。
3、开发语言:c#。
4、已经排除的问题:防火墙,已经测试与他无关;下载地址,下载地址都是一样的,也排除;网络问题,网络都是一样无代{过}{滤}理排除。
5、请教各位还有无其他因素会导致此种情况,或者有无其他更好的下载方法。【备注:用了aria2c.exe下载器情况也是一样的】 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|