强制下载文件,默认情况下不在浏览器上打开

时间:2014-11-26 16:43:48

标签: c# asp.net .net asp.net-mvc download

我有一段代码可以生成不同类型的文件:text,excel等。

例如,对于Excel文件,所有浏览器都会提示用户下载和/或打开其默认软件来处理文件类型。这是预期的行为。但对于文本文件,所有浏览器都“假设”用户想要在新选项卡上打开它。

我想强制下载,因为文本文件很大(30MB +)。我不希望用户右键单击并“另存为...”。我怎么能在C#中做到这一点? 现在我的代码返回一个签名的URL:

return Redirect(signedURL.AbsoluteUri);

3 个答案:

答案 0 :(得分:2)

尝试以下方法:

this.Response.ContentType = "text/plain";
this.Response.AddHeader("content-disposition", "attachment;filename=" + file);

Force download ASP.Net What content type to force download of text response?

答案 1 :(得分:0)

使用此选项强制从外部链接下载文件

    <script language="c#" runat="server">
        protected void Button1_Click1(object sender, EventArgs e)
        {
string k="file full path 'eg: http://something.com/test.pdf' ";
            Response.ContentType = "Application/pdf";
            Response.AppendHeader("Content-Disposition", "attachment; filename=Test_PDF.pdf");

            WebClient wc = new WebClient();
            byte[] myDataBuffer = wc.DownloadData(k);
            Response.BinaryWrite(myDataBuffer);
            Response.End();
        }
    </script>

答案 2 :(得分:0)

我花了三天的时间弄清楚了这一点,然后归结为从服务器进行HTML编码的方式。在本地PC上可以很好地运行,但是一旦您使用IIS将项目移植到服务器上,它就会以“流已关闭”或奇怪的“ H_Visual”文件名作为保存到SAVE AS的文件而不断失败。对话框。

这是我的完整代码:

HttpUtility.UrlEncode()

魔术只是在 SELECT esr.Id INTO #TempScheduleRevisions FROM Revision esr INNER JOIN dbo.Split(@ScheduleRevisionIds, ',') sri ON sri.items = esr.id 方法中。它将我的文件名转换成IIS可以理解的东西,而不是我们愚蠢的人!