asp.net 下载文件

第一种下载方法

 private void DownExcel(string filePath)
        {
            //string path = HttpContext.Current.Server.MapPath("/UploadFiles/KGData/test.xls");
string path = HttpContext.Current.Server.MapPath(filePath);
            FileInfo fileInfo = new FileInfo(filePath);
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.AddHeader("Content-Disposition", "attachment;filename=" + fileInfo.Name);
            Response.AddHeader("Content-Length", fileInfo.Length.ToString());
            Response.AddHeader("Content-Transfer-Encoding", "binary");
            Response.ContentType = "application/octet-stream";
            Response.ContentEncoding = Encoding.GetEncoding("gb2312");
            Response.WriteFile(fileInfo.FullName);
            Response.Flush();
            Response.End();             
        }
View Code

第二种方法

windows.location.href = "/test/ExcelDownLoad.aspx?file=test.xls" ;

protected void ResponseFile()
        {

           string fileName = Request.QueryString["file"];
           ext(fileName);
            System.IO.Stream iStream = null;
            // 缓冲区为10k
            byte[] buffer = new Byte[10240];
            // 文件长度
            int length;
            // 需要读的数据长度
            long dataToRead;

            try
            {
                string fileName = path;
                string filepath = HttpContext.Current.Server.MapPath("/ExcelTemp/") + fileName; //待下载的文件路径
                iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
                    System.IO.FileAccess.Read, System.IO.FileShare.Read);
                Response.Clear();

                dataToRead = iStream.Length;
                //iStream.Position = 0;
                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=" +HttpUtility.UrlEncode(Path.GetFileName(filepath)));
                Response.AppendHeader("Location", Request.Url.AbsoluteUri); 
                iStream.Position = p;
                dataToRead = dataToRead - p;

                while (dataToRead > 0)
                {    // 检查客户端是否还处于连接状态
                    if (Response.IsClientConnected)
                    {
                        length = iStream.Read(buffer, 0, 10240);

                        Response.OutputStream.Write(buffer, 0, length);
                     
                        Response.Flush();
                        
                        buffer = new Byte[10240];
                        dataToRead = dataToRead - length;
                    }
                    else
                    {    // 如果不再连接则跳出死循环
                        dataToRead = -1;
                    }
                }
            }
            catch (Exception ex)
            {
                Response.Write("Error : 文件不存在!!!");
               // Response.Redirect("../Supplier_Idex.aspx");
            }
            finally
            {
                if (iStream != null)
                {
                    iStream.Close();
                }
                Response.End();
            }


        }
View Code
protected string ext(string file)
        {
            string str = string.Empty;
            if(!string.IsNullOrEmpty(file))
            {
                var invalidPattern = new Regex(@"[\/:*?<>|]");
                string strExt = invalidPattern.Replace(file, "");
                strExt =  Path.GetExtension(file);
                switch(strExt)
                {
                    case ".config":
                        str = "文件不存在";
                        break;
                    default:
                        str = file; break;
                }

            }
            return str;
        }               
View Code

使用jquery下载方法

js方法

 jQuery.download = function (downloadurl, method, filepath, filename) {
            jQuery('<form action="' + downloadurl + '" method="' + (method || 'post') + '">' +  // action请求路径及推送方法  
                '<input type="text" name="filepath" value="' + filepath + '"/>' + // 文件路径  
                '<input type="text" name="filename" value="' + filename + '"/>' + // 文件名称  
                '</form>')
                .appendTo('body').submit().remove();
        };



 function ExportToExcel() {
            if (confirm("确定要导出Excel吗?")) {
                var start = getQueryString('fromDate');
                var end = getQueryString('toDate');
                var brand = getQueryString('brandCompany');
                var staff = getQueryString('staff');
                var groupName = getQueryString('groupName');
                $.ajax({
                    type: "POST",
                    dataType: "json",
                    url: "Test.aspx/ExportToExcel",
                    data: "{fromDate:'" + start + "',toDate:'" + end + "',brandName:'" + brand + "'}",
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        var result = eval('(' + data.d + ')');
                        if (result.Body == '没有需要导出的信息') {
                            alert(result.Body);
                        }
                        else {
                            $.download(result.DownLoadUrl, 'post', result.FilePath, result.FileName);
                        }
                    },
                    error: function (msg) {
                       alert('系统繁忙,请稍后重试!');
                    }
                });
            }
             
        }

function getQueryString(name)
        {
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
            var result = window.location.search.substr(1).match(reg); 
            if (result != null) {
                return unescape(result[2]);
            } else {
                return null;
            }
        }

后台方法

 [WebMethod]
        public static string ExportToRiskExcel(DateTime fromDate,DateTime toDate,string brandName)
        {
            DataSet ds = new wcfInternalService.InternalServiceClient().GetList(fromDate, toDate, brandName);
            DownResult result = new DownResult()
            {
                Success = false,
                Body = "导出失败,请稍后再试!"
            };
            if (ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
            {
                string[] columns = { "序号", "案件", "车牌", "分类", "处理时间", "人员", "金额" };
                result = ExportExcel(ds.Tables[0], columns, "分布详情", result);
            }
            else
            {
                result = new DownResult()
                {
                    Success = true,
                    Body = "没有需要导出的信息"
                };
            }
            return JsonConvert.SerializeObject(result);
        }


public static DownResult ExportExcel(DataTable dt, string[] columns, string sheetName, DownResult result)
        {
            string filePath = string.Empty;//文件路径
            string fileName = string.Empty;//文件名称
            Stream stream = DataTableToExcel(dt, columns, sheetName);
            ExcelPackage package = new ExcelPackage(stream);
            fileName = sheetName + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
            filePath = HttpContext.Current.Server.MapPath("~/UploadFile/");//文件保存地址  
            if (!Directory.Exists(filePath))//如果不存在就创建file文件夹
            {
                Directory.CreateDirectory(filePath);
            }
            package.SaveAs(new FileInfo(filePath + fileName));

            result = new DownResult()
            {
                Success = true,
                Body = "导出成功!",
                DownLoadUrl = "DownExcel.aspx",
                FilePath = filePath,
                FileName = fileName,
            };
            return result;
        }
    
  public static Stream DataTableToExcel(DataTable dataTable, string[] columns, string sheetName)
        {
            try
            {
                using (ExcelPackage pck = new ExcelPackage())
                {
                    ExcelWorksheet ws = pck.Workbook.Worksheets.Add(sheetName);
                    ws.Cells["A1"].LoadFromDataTable(dataTable, true);
                    for (int i = 1; i <= columns.Length; i++)
                    {
                        using (ExcelRange rng = ws.Cells[1, i])
                        {
                            rng.Style.Font.Bold = true;
                            rng.Value = columns[i - 1];
                        }
                    }
                    MemoryStream ms = new MemoryStream();
                    pck.SaveAs(ms);
                    ms.Flush();
                    ms.Position = 0;//指定当前流的位置从0开始
                    return ms;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


 public class DownResult
    {
        public bool Success { get; set; }
        public string Body { get; set; }
        public string DownLoadUrl { get; set; }
        public string FilePath { get; set; }
        public string FileName { get; set; }
    }

 方法必须为静态,参数需要一致

 下载页面方法

 protected void Page_Load(object sender, EventArgs e)
        {
            string fileName = Request["filename"];//下载文档名  
            string filePath = Request["filepath"];
            FileInfo fileInfo = new FileInfo(filePath + fileName);
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            String userAgent = HttpContext.Current.Request.UserAgent;
            //判断是否为ie10以下及ie11浏览器  
            if (userAgent.Contains("MSIE") || userAgent.Contains("rv:11"))
            {
                fileName = HttpUtility.UrlEncode(fileName);
            }
            Response.AddHeader("Content-Disposition", string.Format("attachment;filename="{0}"", fileName));
            Response.AddHeader("Content-Length", fileInfo.Length.ToString());
            Response.AddHeader("Content-Transfer-Encoding", "binary");
            Response.ContentType = "application/octet-stream";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            Response.WriteFile(fileInfo.FullName);
            Response.Flush();
            if (File.Exists(Path.GetFullPath(fileInfo.ToString())))
            {
                File.Delete(Path.GetFullPath(fileInfo.ToString()));//用户下载后删除服务器文件
            }
            Response.End();
        }
View Code
原文地址:https://www.cnblogs.com/ZJ199012/p/6293050.html