【发布时间】:2017-02-27 16:08:14
【问题描述】:
我正在尝试通过 HTTPHandler 中的 HTTP 响应下载具有自定义格式的纯文本文件。该文件由数字、字母和“|”组成作为分隔符。该文件是在运行时生成的,并且没有被保存。
句柄也被用于向 JavaScript 函数返回数据,因此下载文件时无法关闭响应。
目前这是用于下载文件的代码。
MemoryStream ms = new MemoryStream();
TextWriter tw = new StreamWriter(ms);
tw.Write(file1);
byte[] bytes = ms.ToArray();
ms.Close();
context.Response.Clear();
context.Response.ContentType = "text/plain";
context.Response.AddHeader("content-disposition", "attachment; filename=file.15");
context.Response.AppendHeader("Content-Length", bytes.Length.ToString());
context.Response.BinaryWrite(bytes);
context.Response.Flush();
context.Response.Close();
context.Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = "true", message = "File1 Done", File1 = query["File1"], File2 = query["File2"] }));
但是,当执行此代码时,没有错误(服务器端和客户端)并且文件没有下载。
【问题讨论】:
-
为什么在关闭并刷新后写入响应?
-
我正在尝试将数据发送回 .aspx 页面上的 javascript 代码。由于我对处理程序和请求/响应的工作方式仍然相对较新,因此我不确定如何执行此操作,因为我拥有的每个打印文件的示例都会刷新、关闭或/并结束响应。因此,我很难使用此处理程序执行这两项任务(下载文件和返回数据)。
-
你根本做不到。
-
我明白了。这可能是它似乎不起作用的原因。我返回数据的原因是,我可以使用一个按钮打印 2 个文件,方法是使用响应打印第一个返回,然后执行另一个 Ajax 发布来打印第二个
标签: javascript c# html download httphandler