C# 如何下载文件

C# 如何下载文件,c#,asp.net-mvc-4,download,C#,Asp.net Mvc 4,Download,我一直遵循下面列出的这些链接,我找到了编写这个小的创建Excel和下载函数的最佳方法。(使用ePlus for Excel) + 每次我运行它时,它都会完美地运行代码,不会出错,但不会“踢出”要下载的文件(在另存为对话框或w/e中) 我做错了什么/错过了什么?-我必须自己写对话吗? 请注意:我也尝试过这种方法 byte[] fileBytes = ReadToEnd(fileStream); string fileName = "example"; return File(file

我一直遵循下面列出的这些链接,我找到了编写这个小的创建Excel和下载函数的最佳方法。(使用ePlus for Excel)

  • +
每次我运行它时,它都会完美地运行代码,不会出错,但不会“踢出”要下载的文件(在另存为对话框或w/e中)

我做错了什么/错过了什么?-我必须自己写对话吗?

请注意:我也尝试过这种方法

 byte[] fileBytes = ReadToEnd(fileStream);
 string fileName = "example";
 return File(fileBytes, contentType, fileName);
当然,我必须弄清楚如何将流转换为字节,但它也并没有显示任何内容

Chrome网络开发工具的形象
很抱歉,如果您的浏览器支持ctl+MouseWheel,则会出现小图像(如果您看不到它,请使用ctl+MouseWheel滚动)。保存Excel包后,您可以使用现有的内存流将其简单地传递给响应对象

代码:

(回应上面的评论。)

从发布的图像来看,实际的文件请求(列表中的最后一个)似乎来自JavaScript代码,而不是普通的文档级请求。鉴于此,服务器端代码很可能工作正常并返回正确的响应

但是,由于这是一个AJAX请求,浏览器实际上不知道如何处理响应。有一些潜在的解决办法。理想情况下,您希望将此作为一个普通请求,并在可能的情况下从图片中删除AJAX。如果这不是一个选项,您仍然可以从JavaScript启动文档级请求。像这样简单的事情:

window.location = '@Url.Action("Method", "Controller")';

这将从当前的JavaScript代码启动,但将用于整个浏览器,而不是AJAX请求。这应该可以解决问题。

最后一行代码(没有显示任何内容)是正确的方法。请详细说明它为什么没有显示任何内容。服务器是否有响应?当你调试这个时,它在哪里失败了?好吧,我在Chrome中使用HTTP头和其他扩展以及一些其他扩展打开了浏览器,并且打开了开发工具,这不会显示出任何“出错”的迹象。除此之外,我如何判断,是的,我在VS中通过了我的代码,没有缺陷?在浏览器的调试工具中,服务器的响应是什么?是否有实际文件通过,但文件为空和/或已损坏?如果您将文件保存到服务器端,是否为有效文件?我没有尝试将其保存到服务器端,请允许我尝试一下,就浏览器而言,它不会向我显示任何文件的任何信息。(控制台是空的)。奇怪的是浏览器没有显示任何内容。应该有一些东西(可能在网络选项卡上?我不熟悉Chrome的工具UI)描述发送到服务器的请求和从服务器接收到的响应。你是怎么提出这个要求的?它是一个链接,一个表单帖子,也许你正试图通过AJAX实现这一点?(如果是后者,则可能是问题所在,而不是服务器端代码中的任何内容。因为浏览器处理AJAX响应的方式与处理普通响应的方式不同。因此不会有保存文件的对话框。)与直接写入
响应
对象相比,从控制器操作返回
ActionResult
更为可取。您的方法会将控制器与HTTP上下文紧密耦合,使其可移植性大大降低,并且很难进行单元测试。非常感谢您的链接!
    Response.AddHeader("content-disposition", "attachment;filename=FILENAME.xlsx")
    Response.Charset = String.Empty
    Response.ContentType = "application/ms-excel"
    Response.BinaryWrite(stream.ToArray())
    Response.End()
window.location = '@Url.Action("Method", "Controller")';