You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用HttpWebRequest获取JPG响应体异常,文件无效且大小翻倍

问题原因
  • 核心错误在于使用StreamReader读取二进制图片数据:StreamReader是为文本处理设计的工具,它会将响应流的二进制字节按ASCII编码解析为字符串,这个过程会篡改或丢失原始二进制数据(比如非ASCII范围的字节会被替换为占位符)。之后将该字符串转回字节数组,相当于对已损坏的数据做二次编码,最终导致文件大小翻倍、图片无法正常打开。
  • 服务器返回的image/jpeg属于二进制数据,必须直接处理字节流,不能经过文本编码/解码的中间步骤。
解决方法

修改响应处理逻辑,直接读取二进制响应流,跳过文本转换步骤:

var request = (HttpWebRequest)WebRequest.Create(myservice);
var postData = string.Concat(HttpUtility.UrlEncode(mykey), "=", HttpUtility.UrlEncode(myvalue));
var postBytes = Encoding.ASCII.GetBytes(postData);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postBytes.Length;

// 提交POST数据
using (var stream = request.GetRequestStream())
{
    stream.Write(postBytes, 0, postBytes.Length);
}

using (var response = (HttpWebResponse)request.GetResponse())
using (var responseStream = response.GetResponseStream())
using (var fileStream = new FileStream(Path.GetTempFileName(), FileMode.Create, FileAccess.Write))
{
    // 直接将二进制流复制到文件,完全保留原始数据
    responseStream.CopyTo(fileStream);
}

补充说明

  • 使用Stream.CopyTo直接在响应流与文件流之间复制数据,全程不涉及文本编码转换,完美保留图片的原始二进制内容。
  • 这种方式无需将整个响应加载到内存,处理大图片时更高效,也符合SQL Server CLR函数的运行环境要求。

内容的提问来源于stack exchange,提问作者Ivan Debono

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:57:32