在 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/