因为现在要用到下载文件的实现,昨天晚上回去想了一下,那不就是把文件读出到IO流中,然后再从流中写入另外一个文件吗?
/// <summary>
/// 下载文件
/// </summary>
private void Down()
{
System.IO.Stream stream = null;
FileStream fs=null;
byte[] buffer = new byte[10000];
int length = 0; //文件长度
long dataToRead; //将要读取的数据
string filepath = @"D:/GJUN/项目/数据表.doc";
string filename = System.IO.Path.GetFileName(filepath);
try
{
stream = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read);
fs = new FileStream(Server.MapPath("down.doc"), FileMode.Create);
dataToRead = stream.Length;
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Discription", "attachment filename=" + filename);
//读取文件
while (dataToRead > 0)
{
if (Response.IsClientConnected)
{
length = stream.Read(buffer, 0, 10000);
//将数据写到当前输出流
//Response.OutputStream.Write(buffer, 0, length);
fs.Write(buffer, 0, length);
fs.Flush();
//Response.Flush();
buffer = new byte[10000];
dataToRead = dataToRead - length;
}
else
{
dataToRead = -1;
}
}
}
catch (Exception ex)
{
Response.Write("Error :" + ex.Message);
}
finally
{
if (stream != null)
{
stream.Close();
fs.Close();
fs.Dispose();
stream.Dispose();
}
}
于是调试了一下就可以实现了,狂喜!
关机----准备看一下电视。刚一站起来,突然发觉被电脑骗了,更加被我自己给骗了。就站在那里想了N分钟,越想越不对噢!那并没有实现到下载啊,只是把一个文件COPY到了另外一个地方,而且换了个名字而已。那并不是真的从SERVER端下载文件到了CLIENT端啊。