我有一段代码可以生成不同类型的文件:text,excel等。
例如,对于Excel文件,所有浏览器都会提示用户下载和/或打开其默认软件来处理文件类型。这是预期的行为。但对于文本文件,所有浏览器都“假设”用户想要在新选项卡上打开它。
我想强制下载,因为文本文件很大(30MB +)。我不希望用户右键单击并“另存为...”。我怎么能在C#中做到这一点? 现在我的代码返回一个签名的URL:
return Redirect(signedURL.AbsoluteUri);
答案 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可以理解的东西,而不是我们愚蠢的人!