Tom*_*ove 1 c# wpf windows-runtime
我正在尝试通过 URL 从互联网下载图像到我的 Windows8 应用程序并将其转换为字节[]。(BitmapImage 不可序列化)
不幸的是,当我尝试处理此代码时,它在字节数组初始化时崩溃,因为流不可查找。
有什么办法可以做到这一点吗?我已经红色了,还没有可以在 WinRT 中查找的流......
private async Task<byte[]> DownloadImageFromWebsite(string url)
{
//BitmapImage result = null;
byte[] result = null;
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
WebResponse response = await request.GetResponseAsync();
Stream imageStream = response.GetResponseStream();
result = new byte[imageStream.Length];
await imageStream.ReadAsync(result, 0, (int)imageStream.Length);
response.Dispose();
}
catch (Exception ex)
{
return null;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
你的问题是这一行:
result = new byte[imageStream.Length];
Run Code Online (Sandbox Code Playgroud)
对于 HTTP 响应流,在读取之前您不知道它有多大。
如果服务器发送一个Content-Length标头,那么您应该能够读取它并使用它调整数组的大小。但是,您仍然需要将整个流(大小未知)读入内存,如下所示:
private async Task<byte[]> DownloadImageFromWebsiteAsync(string url)
{
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
using (WebResponse response = await request.GetResponseAsync())
using (var result = new MemoryStream())
{
await imageStream.CopyToAsync(result);
return result.ToArray();
}
}
catch (WebException ex)
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
PS 我建议您使用HttpClient而不是HttpWebRequest.
| 归档时间: |
|
| 查看次数: |
4020 次 |
| 最近记录: |