简单页面下载通过ResponseWriteFile()函数将指定的文件直接写入HTTP内容输出流该方法实现比较简单本例中通过函数FileDownload()实现文件的下载代码如下
private void FileDownload(string FullFileName)
{
FileInfo DownloadFile = new FileInfo(FullFileName);
ResponseClear();
ResponseClearHeaders();
ResponseBuffer = false;
ResponseContentType = application/octetstream;
ResponseAppendHeader(ContentDisposition attachment;filename= + HttpUtilityUrlEncode(DownloadFileFullName SystemTextEncodingUTF));
ResponseAppendHeader(ContentLength DownloadFileLengthToString());
ResponseWriteFile(DownloadFileFullName);
ResponseFlush();
ResponseEnd();
}
由于在代码中使用了 FileInfo 类必须在代码的开始引用 SystemIO 空间引用代码如下所示
using SystemIO;
FileInfo 类提供创建复制删除移动和打开文件的实例方法并且帮助创建FileStream对象其中Length属性用来获取当前文件的大小FullName 属性获取目录或文件的完整目录
FileDownload()函数实现的原理过程是首先创建FileInfo类通过该类获取要下载文件的信息最后通过 WriteFile()函数下载该文件该方法面临的问题是 WriteFile 方法使文件的二进制数据流向客户端它是一个出名的内存占用狂把整个文件载入服务器的RAM中来提供服务(实际上它甚至于会占用文件两倍大小的空间)对于大文件这会引起服务内存问题并且可能重复ASPNET过程因此较大文件均使用高级下载方法