zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    staticmethod classmethod
    Cache Buffer 区别
    Apache 各启动方式的差别
    网段,掩码
    容器镜像国内下载加速----借助阿里
    import 本质
    数字签名证书的事儿
    java中的sql语句中如果有like怎么写
    VMware+centos7克隆多个虚拟机
    使用Ajax轮询模拟简单的站内信箱(消息管理)功能
  • 原文地址:https://www.cnblogs.com/ZJ199012/p/6293050.html
Copyright © 2011-2022 走看看