ASP.NET文件下载,直接向客户端输出文件(转)

原文地址:http://www.cnblogs.com/mrray/archive/2010/12/22/1914108.html

 默认情况文件下载,直接链接指向文件的地址即可,但是有些情况下浏览器而是直接打开了文件。例如txt文件的下载,火狐浏览器直接打开了txt文件,并不是下载了txt,txt其实被浏览器缓存了起来。

pdf同样如此,一般电脑都安装了Adobe Reader 这个pdf的阅读器,当浏览器下载pdf的文件时候,默认依然是浏览器打开了该pdf文件 而不是下载该pdf文件。

下面的代码就是 默认不让浏览器打开文件,而且下载文件

Download.ashx

<%@ WebHandler Language="C#" Class="Download" %>

using System;
using System.Web;
using System.IO;

public class Download : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";

        string path = context.Server.UrlDecode(context.Request.QueryString["path"].ToString());

        string fileName = Path.GetFileName(path);//文件名
        
        string filePath = context.Server.MapPath(path);//路径

        if (File.Exists(filePath))
        {
            //以字符流的形式下载文件
            FileStream fs = new FileStream(filePath, FileMode.Open);
            byte[] bytes = new byte[(int)fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            fs.Close();
            context.Response.ContentType = "application/octet-stream";
            //通知浏览器下载文件而不是打开
            context.Response.AddHeader("Content-Disposition", "attachment;  filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
            context.Response.BinaryWrite(bytes);
            context.Response.Flush();
            context.Response.End();
        }
        else
        {
            context.Response.Write("未上传文件!!");
            context.Response.End();
        }      
        
        
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}

 

posted @ 2013-02-28 22:26  高山-景行  阅读(2794)  评论(1编辑  收藏  举报