asp.net 如何把HttpWebResponse里面的GetResponseStream转成二进制

阿狸Ahri 2017-07-15 05:03:14
我自己转的,发现,下载回来的图片就是一个断截的~

因为我是通过微信上传了图片的。这个是从调用微信的接口把下载的图片下载到我的本地。


public static HttpWebResponse CreateGetHttpResponseByStream(string url)
{
HttpWebRequest request = null;
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10; //http版本,默认是1.1,这里设置为1.0
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
request.Method = "GET";
return request.GetResponse() as HttpWebResponse;
}



/// <summary>
/// 通过media_ID获取临时资源
/// </summary>
/// <param name="Media_ID"></param>
/// <returns></returns>
public static byte[] Get_Material_Tmp(string Media_ID,ref string res)
{
HttpWebResponse s= HttpHelper.CreateGetHttpResponseByStream("https://api.weixin.qq.com/cgi-bin/media/get?access_token=" + Get_Access_Token() + "&media_id=" + Media_ID);

if (s.ContentType.IndexOf("image") == -1)//请求到图片
{
//获取HTTP返回数据
StreamReader sr = new StreamReader(s.GetResponseStream(), Encoding.UTF8);
JObject tmp = Get_Json(sr.ReadToEnd().Trim());
res = tmp["errmsg"].ToString();
return null ;
}
//Image image = Image.FromStream(s.GetResponseStream());

byte[] img = new byte[s.ContentLength];

Stream i = s.GetResponseStream();
i.Read(img, 0, s.ContentLength.ToInt());//这里获取之后
i.Close();
i.Dispose();
res = "";
return img;
}


然后我用我们公司的显示图片的方法一查,图片是不完整的
...全文
1130 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
心悠茶亦香 2019-08-22
  • 打赏
  • 举报
回复
 public static byte[] PostUrl(string url, string postData)
        {

            HttpContent httpContent = new StringContent(postData);
            httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            HttpClient httpClient = new HttpClient();

            HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

            if (response.IsSuccessStatusCode)
            {
                Task<byte[]> t = response.Content.ReadAsByteArrayAsync();
                return t.Result;
            }
            else
                return null;

        }
可用
闭包客 2017-07-15
  • 打赏
  • 举报
回复
没事的,我刚才说了,StreamReader 写得不好。我还认为 .net 里面一系列 Reader、Writer 的设计都有问题。不过这好像是抄 Java 的…… 还有一点是,现在程序员很多都在写数据库的 CRUD,这都是原子操作,所以对流读取,写入会比较陌生。
阿狸Ahri 2017-07-15
  • 打赏
  • 举报
回复
我对读写
引用 1 楼 closurer 的回复:
为什么你在读取图片数据的时候不使用 StreamReader 了呢? 这个问题和 Stream 的 CanSeek 属性,是否可以查找有关,有些流是不知道长度的。 我觉得 StreamReader 这个类写得并不好,所以写过一个缓冲类,作用与 StreamReader 相似:https://code.csdn.net/closurer/less-common/tree/master/Less.Common/Less.Windows/IO/Buffer.cs 我在自己的类库中给 Stream 写了一个 ToByteArray() 扩展方法,直接转换成 byte[]:https://code.csdn.net/closurer/less-common/tree/master/Less.Common/Less.Windows/IO/StreamExtensions.cs 在 NuGet 下载 Less.Common,using Less.Windows 命名空间,可以直接使用。
我对流写入,写出 不是这么懂。因为我看到streamread里面的,read方法是接收一个char[]的,我不懂怎么弄,因为我要byte的 所以我就换了
闭包客 2017-07-15
  • 打赏
  • 举报
回复
为什么你在读取图片数据的时候不使用 StreamReader 了呢? 这个问题和 Stream 的 CanSeek 属性,是否可以查找有关,有些流是不知道长度的。 我觉得 StreamReader 这个类写得并不好,所以写过一个缓冲类,作用与 StreamReader 相似:https://code.csdn.net/closurer/less-common/tree/master/Less.Common/Less.Windows/IO/Buffer.cs 我在自己的类库中给 Stream 写了一个 ToByteArray() 扩展方法,直接转换成 byte[]:https://code.csdn.net/closurer/less-common/tree/master/Less.Common/Less.Windows/IO/StreamExtensions.cs 在 NuGet 下载 Less.Common,using Less.Windows 命名空间,可以直接使用。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧