下边是我下载远程图象的代码,可是在WinForm下,下载的图像总是空的(图像的字节数为0),但同样的代码放在WebForm下就没有问题,请问这是怎么回事!
/// <summary>
/// 从网上下载一张图像
/// </summary>
/// <param name="sUrl"></param>
/// <returns></returns>
public System.Drawing.Image DownloadImage(string sUrl)
{
System.Drawing.Image image = null;
using (MemoryStream memoryStream = GetTeledata(sUrl.Trim(), 20000))
{
if (memoryStream != null)
{
try
{
image = System.Drawing.Image.FromStream(memoryStream);
}
catch
{
if (image != null)
{
image.Dispose();
image = null;
}
}
}
}
return image;
}
/// <summary>
/// 获取远程数据并以流的方式返回
/// </summary>
/// <param name="url">获取地址</param>
/// <param name="timeout">时限</param>
/// <returns>返回获取的数据流</returns>
public MemoryStream GetTeledata(string url, int timeout)
{
Stream stream = null;
MemoryStream memoryStream = null;
try
{
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(@url.Trim());
webRequest.Timeout = timeout;
webRequest.Credentials = CredentialCache.DefaultCredentials; webRequest.Method = "GET";
webRequest.AllowAutoRedirect = false;
webRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
webRequest.Accept = @"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
stream = webRequest.GetResponse().GetResponseStream();
memoryStream = new MemoryStream();
byte[] bs = new byte[256];
for (int j = stream.Read(bs, 0, (int)bs.Length); j > 0; j = stream.Read(bs, 0, (int)bs.Length))
{
memoryStream.Write(bs, 0, j);
}
stream.Close();
memoryStream.Position = (long)0;
}
catch
{
if (memoryStream != null)
{
memoryStream.Close();
memoryStream = null;
}
}
finally
{
if (stream != null)
{
stream.Close();
stream = null;
}
} return memoryStream;
}
/// <summary>
/// 从网上下载一张图像
/// </summary>
/// <param name="sUrl"></param>
/// <returns></returns>
public System.Drawing.Image DownloadImage(string sUrl)
{
System.Drawing.Image image = null;
using (MemoryStream memoryStream = GetTeledata(sUrl.Trim(), 20000))
{
if (memoryStream != null)
{
try
{
image = System.Drawing.Image.FromStream(memoryStream);
}
catch
{
if (image != null)
{
image.Dispose();
image = null;
}
}
}
}
return image;
}
/// <summary>
/// 获取远程数据并以流的方式返回
/// </summary>
/// <param name="url">获取地址</param>
/// <param name="timeout">时限</param>
/// <returns>返回获取的数据流</returns>
public MemoryStream GetTeledata(string url, int timeout)
{
Stream stream = null;
MemoryStream memoryStream = null;
try
{
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(@url.Trim());
webRequest.Timeout = timeout;
webRequest.Credentials = CredentialCache.DefaultCredentials; webRequest.Method = "GET";
webRequest.AllowAutoRedirect = false;
webRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
webRequest.Accept = @"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
stream = webRequest.GetResponse().GetResponseStream();
memoryStream = new MemoryStream();
byte[] bs = new byte[256];
for (int j = stream.Read(bs, 0, (int)bs.Length); j > 0; j = stream.Read(bs, 0, (int)bs.Length))
{
memoryStream.Write(bs, 0, j);
}
stream.Close();
memoryStream.Position = (long)0;
}
catch
{
if (memoryStream != null)
{
memoryStream.Close();
memoryStream = null;
}
}
finally
{
if (stream != null)
{
stream.Close();
stream = null;
}
} return memoryStream;
}
您说的第2点我不太明白,程序里是用循环的方式每次读取255个字节到数据流中汇合的,在WebForm程序里能正常,在WinForm下没有道理不行啊