为什么使用HttpWebRequest从本地主机下载的映像损坏了?

时间:2019-04-10 06:48:34

标签: c# io system.net

原始图像(.jpg)文件大小为49kb,但下载后的文件大小为87kb,并且已损坏。但是对于文本文件,它可以工作。使用HttpWebRequest或其他System.Net类下载图像时,我需要做什么? 我正在将XAMPP用于本地主机。

method2

1 个答案:

答案 0 :(得分:0)

您不应将StreamReader和StreamWriter用于非文本的内容。使用它们时,将应用编码。编码不能与任意二进制数据很好地融合,this blog可以证明。

相反,您应该使用简单的FileStream

using (var output = File.OpenWrite(localFileName))
{
    using (var responseStream = response.GetResponseStream())
    {
        await responseStream.CopyToAsync(output);
    }
}

不幸的是,这可能不是您唯一的问题,因为GZip压缩(如果服务器正在使用它)也可能会出现问题。您可以通过简单的设置更改来解决此问题:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(remoteFileOrUri));

request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();

using (var output = File.OpenWrite(localFileName))
{
    using (var responseStream = response.GetResponseStream())
    {
        await responseStream.CopyToAsync(output);
    }
}