c# - 强制下载 ASP.Net

标签 c# asp.net webforms download

在 ASP.Net(使用 C#)中,我试图创建一个包含纯文本的 .DAT 文件,并将其发送到浏览器并强制下载。我已经尝试了几件事,但无法正常工作。在我的 aspx 文件中有一个 ImageButton

<asp:ImageButton ID="btnSave" runat="server" CausesValidation="False" ImageUrl="~/Images/Stages/Database/Save.png" OnClick="btnSave_OnClick" Width="26px" />

在 OnClick 方法中,我尝试创建文件并将其发送到浏览器。

protected void btnSave_OnClick(object sender, EventArgs e)
{
    string file = "test.dat";
    string fileName = "~\\Stages\\Broekx\\Databanken\\" + file;

    FileStream fs = new FileStream(MapPath(fileName), FileMode.Open);
    long cntBytes = new FileInfo(MapPath(fileName)).Length;
    byte[] byteArray = new byte[Convert.ToInt32(cntBytes)];
    fs.Read(byteArray, 0, Convert.ToInt32(cntBytes));
    fs.Close();

    ImageButton btnSave = (ImageButton)FormViewStagesDummy.FindControl("btnSave");
    btnSave.Visible = false;

    File.Delete(Server.MapPath(fileName));

    if (byteArray != null)
    {
        this.Response.Clear();
        this.Response.ContentType = "text/plain";
        this.Response.AddHeader("content-disposition", "attachment;filename=" + file);
        this.Response.BinaryWrite(byteArray);
        this.Response.End();
        this.Response.Flush();
        this.Response.Close();
    }
}

文件 test.dat 存在于正确的文件夹中,在读入字节后必须将其删除。我已经在不删除文件的情况下尝试过此操作,但它也不起作用。

单击 btnSave 后,按钮必须隐藏,因此我将参数 Visible 设置为 false。

我也尝试过使用内容类型“application/octet-stream”或 PDF 文件和内容类型“application/pdf”,但没有任何效果。页面加载正常,没有文件正在下载。

最佳答案

文件字符串的路径是否真的正确?

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

不应该是文件名吗?

为什么要在将文件写入响应之前将其删除?通过响应提供文件然后删除它不是更有意义吗?

即打电话

File.Delete(Server.MapPath(fileName));

回复后。

你应该尝试:

Response.TransmitFile( Server.MapPath(fileName) );
Response.End();

TransmitFile 非常高效,因为它基本上将文件流卸载到 IIS,包括可能导致文件缓存在内核缓存中(基于 IIS 的缓存规则)。 Response.End();

关于c# - 强制下载 ASP.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9277722/

相关文章:

c# - Outlook HTMLBody 仅返回有限的格式

c# .NET 运行时对象类型

c# - 关于mssql和mysql中的select查询以及表名的保留关键字问题

html - 单击 asp 链接按钮时如何更改 asp 转发器内的列表的 css 类?

c# - 动态添加链接按钮到 ASP GridView

C# WinForms DataBindings 在通过控件进行 Tab 键时不起作用

c# - 如何在Unity中实现ChatGPT?

c# - 添加命名空间时出错

c# - 如何制作一个aspxdocumentviewer方向rtl?

asp.net - 使光标指针忙碌