【发布时间】:2021-09-05 04:37:55
【问题描述】:
我正在控制器中以 StringBuilder 的格式制作动态 CVS 报告文件。我已尝试使用此代码返回文件:
公共异步任务 GetCvsAsync(....) { …… //制作文件
using (MemoryStream stream = new MemoryStream())
{
StreamWriter objstreamwriter = new StreamWriter(stream);
objstreamwriter.Write(res.ToString());
objstreamwriter.Flush();
objstreamwriter.Close();
return File(stream.ToArray(), "application/octet-stream", "test.csv");
}
}
它会产生正确的结果,但在控制台响应标头中(前面没有任何反应),如下所示:
如果我右键单击控制台并单击在新选项卡中打开,它将开始下载文件。我也试过这种方法:
var f = File(Encoding.UTF8.GetBytes(res.ToString()), "text/csv", "authors.csv");
return f;
res 属于 StringBuilder 类型。
我想在文件准备好后自动开始下载,我不知道该怎么办。
注意: 此操作由我的剃须刀页面上的 href 标记 onClick 事件调用:
function cvs(meID, oID, tID) {
$.get("/Dashboard/GetCVS?meID=" + meID
+ "&oID=" + oID+ "&tID=" + tID);
}
【问题讨论】:
-
我不清楚您具体描述的是什么行为。当您右键单击链接并在新选项卡中打开时,它会按预期下载文件吗?但是,当您通常单击链接时,它不会吗?它做了什么?
-
我不是说我右键点击链接,我说的是我右键点击控制台响应的时候(图中)。事实上,前面没有发生任何事情(如果我检查控制台我可以看到这个结果)。现在清楚了吗?
-
啊,看起来问题是您正试图通过 AJAX 下载文件,但客户端代码没有对响应做任何事情。这回答了你的问题了吗? Download File Using Javascript/jQuery
-
这很有帮助@David 谢谢你。
标签: file .net-core model-view-controller dynamic razor-pages