c#中关于二进制流的读取问题。

Tulipfly 2009-03-02 04:42:11
在我的程序中,我想让用户在点击一个链接出现‘保存’的对话框,我使用了下面的方式,可是将http地址获得的流文件读取到byte中老是读不全,请问下是什么原因,或者有没有别的什么方法可以实现相同的效果,先谢谢了。。。。。

WebRequest wreq = WebRequest.Create("http://file.fetion.chinacache.net/www/home/v6/images/face/lianbu/lianbu.ffl");

using (HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse())
{
Response.Clear();
Response.ContentType = "application/octet-stream";//wresp.ContentType;
Response.AppendHeader("content-disposition", "attachment;filename=" + Server.UrlEncode("lianbu.ffl"));

var stream = wresp.GetResponseStream();

byte[] bb = new byte[wresp.ContentLength];
stream.Read(bb, 0, (int)wresp.ContentLength);
stream.Close();
stream.Dispose();
Response.BinaryWrite(bb);
Response.End();

}
...全文
168 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
smartxue1987 2009-03-02
  • 打赏
  • 举报
回复
WebRequest wreq = WebRequest.Create("http://file.fetion.chinacache.net/www/home/v6/images/face/lianbu/lianbu.ffl");
string s;
using (HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse())
{

Stream stream = wresp.GetResponseStream();
StreamReader sr = new StreamReader(stream);
s = sr.ReadToEnd();
sr.Close();
stream.Close();
}
byte[] bSet = System.Text.Encoding.UTF8.GetBytes(s);
Response.BinaryWrite(bSet);
Response.End();
Tulipfly 2009-03-02
  • 打赏
  • 举报
回复
谢谢各位的热情。。。。。尤其感谢 CutBug , jiezi316 。。。。用CutBug 的方法问题得到解决。
jiezi316 2009-03-02
  • 打赏
  • 举报
回复
再给你补充个技巧,在while的循环里,你还可以通过thread.sleep的方式来变通的控制用户的下载速率
jiezi316 2009-03-02
  • 打赏
  • 举报
回复
晕,写错了。是 可以输出了。
jiezi316 2009-03-02
  • 打赏
  • 举报
回复
while(true)
{
index = stream.Read(bb,0,bb.Length);
if(index == 0)
break;
ms.Write(bb,0,index);
}
你应该申明一个buffer,然后循环的把流写入buffer,我这里使用的是一个内存流来存放的,你这里完全都可以输入了。
jiezi316 2009-03-02
  • 打赏
  • 举报
回复
不能这么读
WebRequest wreq = WebRequest.Create("http://file.fetion.chinacache.net/www/home/v6/images/face/lianbu/lianbu.ffl");

using (HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse())
{
Response.Clear();
Response.ContentType = "application/octet-stream";//wresp.ContentType;
Response.AppendHeader("content-disposition", "attachment;filename=" + Server.UrlEncode("lianbu.ffl"));

var stream = wresp.GetResponseStream();
byte[] bb = new byte[1024];
MemoryStream ms = new MemoryStream();
int index = 0;
while(true)
{
index = stream.Read(bb,0,bb.Length);
if(index == 0)
break;
ms.Write(bb,0,index);
}
byte[] fStream = ms.ToArray();
ms.Close();
stream.Close();
Response.BinaryWrite(fStream );
Response.End();

}
CutBug 2009-03-02
  • 打赏
  • 举报
回复
using (HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse())
{

Stream stream = wresp.GetResponseStream();
StreamReader sr = new StreamReader(stream);
s = sr.ReadToEnd();
sr.Close();
stream.Close();
}
byte[] bSet = System.Text.Encoding.UTF8.GetBytes(s);
xuan.ye 2009-03-02
  • 打赏
  • 举报
回复
stream.Read(bb, 0, (int)wresp.ContentLength);//这块好出问题
Tulipfly 2009-03-02
  • 打赏
  • 举报
回复
之前我在获得图片的时候为了实现这个效果,跟这个方法一样,也是不行。后来换其它的方法实现了,可是那是bimp类型,不知道ffl格式文件有没有别的办法。
Tulipfly 2009-03-02
  • 打赏
  • 举报
回复
文件是全的没什么问题,我调试过了的。就是在读取到byte时没读取全,好像是文件太大了,后面的被截断了,调试的时候后面全是0.
Jinglecat 2009-03-02
  • 打赏
  • 举报
回复
你先确定是 WebRequest 获取的 wresp 不全,直接先输出到文件看看


还是输出 HttpResponse.BinaryWrite 丢失

62,268

社区成员

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

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

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

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