【发布时间】:2012-11-26 13:54:37
【问题描述】:
我需要下载一些超过 25 MB 的文件,但我的网络只允许请求 25 MB 的文件。
我正在使用以下代码
const long DefaultSize = 26214400;
long Chunk = 26214400;
long offset = 0;
byte[] bytesInStream;
public void Download(string url, string filename)
{
long size = Size(url);
int blocksize = Convert.ToInt32(size / DefaultSize);
int remainder = Convert.ToInt32(size % DefaultSize);
if (remainder > 0) { blocksize++; }
FileStream fileStream = File.Create(@"D:\Download TEST\" + filename);
for (int i = 0; i < blocksize; i++)
{
if (i == blocksize - 1)
{
Chunk = remainder;
}
HttpWebRequest req = (HttpWebRequest)System.Net.WebRequest.Create(url);
req.Method = "GET";
req.AddRange(Convert.ToInt32(offset), Convert.ToInt32(Chunk+offset));
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
// StreamReader sr = new StreamReader(resp.GetResponseStream());
using (Stream responseStream = resp.GetResponseStream())
{
bytesInStream = new byte[Chunk];
responseStream.Read(bytesInStream, 0, (int)bytesInStream.Length);
// Use FileStream object to write to the specified file
fileStream.Seek((int)offset, SeekOrigin.Begin);
fileStream.Write(bytesInStream,0, bytesInStream.Length);
}
offset += Chunk;
}
fileStream.Close();
}
public long Size(string url)
{
System.Net.WebRequest req = System.Net.HttpWebRequest.Create(url);
req.Method = "HEAD";
System.Net.WebResponse resp = req.GetResponse();
resp.Close();
return resp.ContentLength;
}
它可以在磁盘上正确写入内容,但内容不工作
【问题讨论】:
-
我无法真正提供答案,但您能单步执行代码吗?我建议缩小所有数字(例如,将最大块大小设置为 10 字节,将下载文件大小设置为 25 字节),然后逐步进行。如果涉及较小的块,可能会更容易发现您出错的地方。
-
你有没有得到任何最终解决方案,并且 working ?有答案:
it still not working你说
标签: asp.net c#-4.0 httpwebrequest websocket