当前位置: 代码迷 >> ASP.NET >> 高手,进来帮忙看一下解决思路
  详细解决方案

高手,进来帮忙看一下解决思路

热度:6229   发布时间:2013-02-25 00:00:00.0
高手,进来帮忙看一下
string url=@"http://localhost/3174953.wav";
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
Stream receiveStream = myHttpWebResponse.GetResponseStream();
Encoding encode = System.Text.Encoding.Default;
StreamReader readStream = new StreamReader( receiveStream, encode );
myHttpWebResponse.Close();
readStream.Close();
byte[] mybyte=System.Text.Encoding.Default.GetBytes(aa);
FileStream fs=File.Open(Server.MapPath("test.wav"),FileMode.Create,FileAccess.ReadWrite);
fs.Write(mybyte,0,mybyte.Length);
fs.Close();

为什么我这样下载的歌曲,就是始终播放不起来啊?
有谁知道的啊?

------解决方案--------------------------------------------------------
//摘自MisterNet
static public bool ResponseFile(HttpRequest _Request,HttpResponse _Response,string _fileName,string _fullPath, long _speed) 

try 

FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
BinaryReader br = new BinaryReader(myFile); 
try 

_Response.AddHeader("Accept-Ranges", "bytes"); 
_Response.Buffer = false; 
long fileLength = myFile.Length; 
long startBytes = 0; 

int pack = 10240; //10K bytes 
//int sleep = 200; //每秒5次 即5*10K bytes每秒 
int sleep = (int)Math.Floor(1000 * pack / _speed) + 1; 
if (_Request.Headers["Range"] != null) 

_Response.StatusCode = 206; 
string[] range = _Request.Headers["Range"].Split(new char[] {'=', '-'}); 
startBytes = Convert.ToInt64(range[1]); 

_Response.AddHeader("Content-Length", (fileLength - startBytes).ToString()); 
if (startBytes != 0) 

_Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength)); 

_Response.AddHeader("Connection", "Keep-Alive"); 
_Response.ContentType = "application/octet-stream"; 
_Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8) ); 
  
br.BaseStream.Seek(startBytes, SeekOrigin.Begin); 
int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) + 1; 

for (int i = 0; i < maxCount; i++) 

if (_Response.IsClientConnected) 

_Response.BinaryWrite(br.ReadBytes(pack)); 
Thread.Sleep(sleep); 

else 

i=maxCount;



catch 

return false; 

finally 

br.Close(); 
myFile.Close(); 


catch 

return false; 

return true; 

  相关解决方案