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();
}
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();
}
解决方案 »
- 请教,新出的rad studio xe2有教程卖吗?
- ADOConnection1.BeginTrans;
- 下面是冯哥给的根据CPU资源利用率报警的程序,虽然是完整代码了,可是小弟实在惭愧,还是有点看不明白,请懂行的朋友帮忙分析一下,如何
- 我的dblistbox加了数据 怎么无法点选?
- Delphi7 QReport 打印132列报表问题
- 编辑组件opendilalog,如何使用过滤器Filter
- delphi6中 Corba data object 中怎么用ado呢? 为什么总不行?
- 怎么在当前节点处增加同层节点或子节点?????
- 祝大家春节快乐,来年发大财:)
- 关于delphi中sql7用户id的改变
- 关于动态连接库dll的问题,请大家帮忙啊!
- 100分求教xml添加子节点及属性问题
首先第一个要解决的是session问题
我用flashget试着下载链接,结果肯定要报Sessoin not found.Session may have expired
用SOCKET控件就可以做到,一定要集成到INTRWEB上吗?
------------------------------
我接触dephi在网络应用太少了,可能想法比较单一。
我的这个intraweb实现断点续传想法是方便于 管理下载,防盗链,另涉及到下载时文件解密
不考虑这些的话一个WebApplication.SendFile('test.zip');就可以了.如果是你,你怎么设计呢?