您的位置:首页 > 编程语言 > ASP

Asp.net(c#)实现多线程断点续传

2005-03-25 13:58 423 查看
System.IO.Stream iStream = null;




// Buffer to read 10K bytes in chunk:


byte[] buffer = new Byte[10240];




// Length of the file:


int length;




// Total bytes to read:


long dataToRead;




// Identify the file to download including its path.


string filepath = @"E:/software/SQL Server 2000 Personal Edition.ISO";




// Identify the file name.


string filename = System.IO.Path.GetFileName(filepath);




try






{


// Open the file.


iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,


System.IO.FileAccess.Read,System.IO.FileShare.Read);


Response.Clear();




// Total bytes to read:


dataToRead = iStream.Length;




long p = 0;


if(Request.Headers["Range"]!=null)






{


Response.StatusCode = 206;


p = long.Parse( Request.Headers["Range"].Replace("bytes=","").Replace("-",""));


}


if(p != 0)






{


Response.AddHeader("Content-Range","bytes " + p.ToString() + "-" + ((long)(dataToRead - 1)).ToString() + "/" + dataToRead.ToString());


}


Response.AddHeader("Content-Length",((long)(dataToRead-p)).ToString());


Response.ContentType = "application/octet-stream";


Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(filename)));




iStream.Position = p;


dataToRead = dataToRead - p;


// Read the bytes.


while (dataToRead > 0)






{


// Verify that the client is connected.


if (Response.IsClientConnected)






{


// Read the data in buffer.


length = iStream.Read(buffer, 0, 10240);




// Write the data to the current output stream.


Response.OutputStream.Write(buffer, 0, length);




// Flush the data to the HTML output.


Response.Flush();




buffer= new Byte[10240];


dataToRead = dataToRead - length;


}


else






{


//prevent infinite loop if user disconnects


dataToRead = -1;


}


}


}


catch (Exception ex)






{


// Trap the error, if any.


Response.Write("Error : " + ex.Message);


}


finally






{


if (iStream != null)






{


//Close the file.


iStream.Close();


}
Response.End();


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: