[英]c# download weird behavior
因此,我尝试使用C#
从Internet下载文件,其中有两种文件: .twb
和.twbx
,其中.twbx
是包含.twb
和另外两个文件夹的zip文件。 下载.twb
文件时,我的下载程序工作正常,但是下载.twbx
,我总是得到一个完全不同的文件-名称相同,但大小和内容却大不相同。 知道为什么会发生这种情况吗?
这是下载代码:
request = setUpRequest(dLink);
((HttpWebRequest)request).KeepAlive = true;
((HttpWebRequest)request).Host = host;
((HttpWebRequest)request).Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
((HttpWebRequest)request).Referer = referer;
((HttpWebRequest)request).Headers["Accept-Encoding"] = "gzip,deflate,sdch";
((HttpWebRequest)request).Headers["X-CSRF-Token"] = CSRF_TOKEN;
((HttpWebRequest)request).Headers["X-Prototype-Version"] = "1.7_rc3";
((HttpWebRequest)request).Headers["X-Requested-With"] = "XMLHttpRequest";
((HttpWebRequest)request).Headers["Origin"] = origin;
response = getResponse(request);
Stream resp = response.GetResponseStream();
if ((response.ContentEncoding.ToLower().Contains("gzip")))
{
resp = new System.IO.Compression.GZipStream(resp, System.IO.Compression.CompressionMode.Decompress);
}
else if ((response.ContentEncoding.ToLower().Contains("deflate")))
{
resp = new System.IO.Compression.DeflateStream(resp, System.IO.Compression.CompressionMode.Decompress);
}
String buffer = new StreamReader(resp, System.Text.Encoding.UTF8).ReadToEnd();
String filename = response.Headers["Content-Disposition"];
filename = Regex.Match(filename, "\".*\"").Value;
filename = filename.Substring(1, filename.Length - 2);
//Console.WriteLine("Writing content to {0}...", filename);
System.IO.File.WriteAllText(directory + filename, buffer);
resp.Close();
resp.Dispose();
如果您好奇,这里是setUpRequest()
:
private static WebRequest setUpRequest(String url)
{
WebRequest request = WebRequest.Create(url);
((HttpWebRequest)request).CookieContainer = cookieContainer;
request.PreAuthenticate = true;
request.UseDefaultCredentials = true;
((HttpWebRequest)request).AllowAutoRedirect = false;
return request;
}
您不应该将二进制内容解码为文本,因为那样会破坏二进制文件。 只需将原始字节从输入流复制到FileStream
:
String filename = response.Headers["Content-Disposition"];
filename = Regex.Match(filename, "\".*\"").Value;
filename = filename.Substring(1, filename.Length - 2);
using (FileStream target = new FileStream(directory + filename, FileMode.Create, FileAccess.Write))
resp.CopyTo(target);
resp.Close();
resp.Dispose();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.