[C#] ASP.NET 档案下载(1) - POST 和 GET 触发档案下载

本篇主要介绍 POST 和 GET 触发档案下载的方式。

1. 使用表单送出的方式 (POST)

<form id="form1" runat="server">    <div>        <button type="button" id="download_btn">下载档案 (POST)</button>    </div></form><script>    document.getElementById("download_btn").onclick = function () {        //档案下载网址        var url = "/Download.ashx";                //产生 form        var form = document.createElement("form");        form.method = "POST";        form.action = url;        //如果想要另开视窗可加上target        //form.target = "_blank";        //index为要下载的档案编号,存入hidden跟表单一起送出        var input = document.createElement("input");        input.type = "hidden";        input.name = "index";        input.value = "1";        form.appendChild(input);        //送出表单并移除 form        var body = document.getElementsByTagName("body")[0];        body.appendChild(form);        form.submit();        form.remove();    };</script>

2. 使用超连结的方式 (GET)

<form id="form1" runat="server">    <div>        <a id="download_btn">下载档案 (GET)</a>    </div></form><script>    //档案下载网址    var url = "/Download.ashx";    var a = document.getElementById("download_btn");    //index为要下载的档案编号,使用QueryString方式加入网址后方    a.href = url + "?index=2";    //如果想要另开视窗可加上target    //a.target = "_blank";</script>

3. 后端程式使用泛型处理常式

public class Download : IHttpHandler{    public void ProcessRequest(HttpContext context)    {        var index = context.Request.Params["index"];        var fileName = "测试档案" + index + ".xlsx";                //取得档案在Server上的实体路径        var filePath = context.Server.MapPath("~/File/" + fileName);        //读取档案并将档案转成二进制内容        var output = new byte[0];        using (var fs = new FileStream(filePath,             FileMode.Open, FileAccess.Read))        {            output = new byte[(int)fs.Length];            fs.Read(output, 0, output.Length);        }        //将档案输出到浏览器        context.Response.Clear();        context.Response.AddHeader(            "Content-Length", output.Length.ToString());        context.Response.ContentType = "application/octet-stream";        context.Response.AddHeader(            "content-disposition",             "attachment; filename=" + fileName);        context.Response.OutputStream.Write(output, 0, output.Length);        context.Response.Flush();        context.Response.End();    }    public bool IsReusable    {        get        {            return false;        }    }}

结果:
http://img2.58codes.com/2024/20106865aWMwfSogZ3.jpg

结语:
下一篇介绍大型档案下载的方式。

相关文章:
[C#] ASP.NET 档案下载(1) - POST 和 GET 触发档案下载
[C#] ASP.NET 档案下载(2) - 大型档案下载
[C#] ASP.NET 档案下载(3) - 档案续传


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章