[C#] http如何在POST之后下载文件

5 篇文章 0 订阅

原理

  • 要让浏览器弹出另存为的对话框,需要在http header里面设置恰当的content-type。浏览器会根据response里面的content-type来做不同的处理和响应
  • 要想指定下载的默认文件名,需要设置Content-Disposition这个header。
  • 要下载的文件,需要写入response的http body里面。想下载什么内容,写什么内容。
  • Context.Response.End()会结束当前页面请求的处理,避免Page_Load之后的filter写额外的东西到http body去。

代码

if (exportcsv == 1 && Context.Request.HttpMethod == "POST")
{
	Context.Response.ContentType = "text/csv";
	Context.Response.AddHeader("Content-Disposition", "attachment;filename=mydata.csv");

	foreach (DataRow row in ds.Tables[0].Rows)
	{
		Context.Response.Output.WriteLine(string.Format("{0},{1}", row["name"], row["age"]));
	}

	Context.Response.End();
			
	return;
}


另外,csv文件下载之后有可能会中文乱码,可能会需要在写csv正文之前先:


    var bom = System.Text.Encoding.UTF8.GetPreamble();
    context.Response.BinaryWrite(bom);





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值