下载一个图像文件,服务器端是一个Servlet,代码如下,每一次,当这个图像文件小的时候,下载没有问题,68M大的时候,可以下载,但当图像文件达到150M大小的时候,下载结果为0k大小,我修改了timeout时间的大小,无济于事,不知道问题到底出在哪里?哪位兄台指点一下,不胜感激。String ImageURL = "http://210.42.25.205:8080/servlets-examples/ImageGetServlet?ImageInfo=";
String pathName = @"D:\2005-8\BaseDir";
try
{
string fileName = "54310.rm";
string ophos = "&OPHOS=OPHOS";
string opcd = "&OPCD=OPCD";
string imageURL = ImageURL + fileName + ophos + opcd;
Console.WriteLine(imageURL);
Console.WriteLine(fileName); HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(imageURL);
hwr.Timeout = 30000;
HttpWebResponse hwrs = (HttpWebResponse)hwr.GetResponse();
Stream receiveStream = hwrs.GetResponseStream();
MemoryStream ms = new MemoryStream();
byte[] bt;
while(true) 
{
bt = new byte[1024];
int cnt = receiveStream.Read(bt, 0, 1024);
ms.Write(bt,0,cnt);
if (cnt == 0) 
break;
}
byte[] byteImage = new byte[ms.Length];
byteImage = ms.ToArray();
FileStream outStream = new FileStream(pathName.Trim() + "\\" + fileName.Trim() , FileMode.Create);
outStream.Write(byteImage,0,(int)byteImage.Length);
outStream.Flush();
outStream.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

解决方案 »

  1.   

    采用断点续传,参考一下flashget日志(用flashget下一个skycn的软件看看)
      

  2.   

    givenchy(希希),不分块下载不了吗?分块的大小依据是什么,分多大的块下载?如果分块下载,如果下载,能给一段代码看看吗?
      

  3.   

    可以不分块,但是不能使用 MemoryStream 作为缓冲,因为内存有限,只好直接保存到硬盘了,速度可能会慢一点。
      

  4.   

    http://www.yesky.com/390/1781390.shtml
      

  5.   

    jimh(Jimmy) ( 一星(中级)),谢谢你的回答,我试过了,是这样的。
      

  6.   

    jimh(Jimmy) , Stream receiveStream = hwrs.GetResponseStream(); 这一步,如果不把它缓存在MemoryStream中,我如何得到receiveStream的总长度?因为我不能读一段就把它写道文件了,要求读出所有内容放到一个字节数组里,我这里不知道总长度,无法定义字节数组的大小。有没有得到这个receiveStream中内容的总长度的方法?