C#从HTTP请求中保存文件

dka*_*zon 22 c#

我试图从HttpWebResponse下载并保存文件,但我正确地保存文件(文本文件除外)有问题.

我认为这与这部分有关:

byte[] byteArray = Encoding.UTF8.GetBytes(http.Response.Content);
MemoryStream stream = new MemoryStream(byteArray);
Run Code Online (Sandbox Code Playgroud)

使用上面的代码文本文件可以正常工作,但是当我尝试将内容保存到图像文件时,它会被破坏.如何将此"字符串"数据写入图像文件(和其他二进制文件)

忘了提,这是.NET CP 3.5,我有一个围绕HttpWebResponse类的包装类来添加OAuth等.

Jon*_*eet 53

问题是你要解释的二进制数据,文本,即使它不是-只要你开始把内容作为一个字符串,而不是字节,你就麻烦了.你没有给出你的包装类的细节,但我假设你的Content属性返回一个字符串 - 你将无法使用它.如果您的包装类不允许您从Web响应中获取原始数据,则需要对其进行修改.

如果您使用的是.NET 4,则可以使用新的CopyTo方法:

using (Stream output = File.OpenWrite("file.dat"))
using (Stream input = http.Response.GetResponseStream())
{
    input.CopyTo(output);
}
Run Code Online (Sandbox Code Playgroud)

如果您不使用.NET 4,则必须手动进行复制:

using (Stream output = File.OpenWrite("file.dat"))
using (Stream input = http.Response.GetResponseStream())
{
    byte[] buffer = new byte[8192];
    int bytesRead;
    while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, bytesRead);
    }
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*hen 7

使用WebClient.DownloadFile.你可以手动完成(类似这样),但WebClient是简单下载的最佳选择.