本篇主要介绍 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; } }}
结果:
结语:
下一篇介绍大型档案下载的方式。
相关文章:
[C#] ASP.NET 档案下载(1) - POST 和 GET 触发档案下载
[C#] ASP.NET 档案下载(2) - 大型档案下载
[C#] ASP.NET 档案下载(3) - 档案续传