在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”,但没有任何效果。页面正常加载,没有下载文件。
答案 0 :(得分:3)
文件字符串的路径实际上是否正确?
this.Response.AddHeader("content-disposition", "attachment;filename=" + file);
它不应该是文件名吗?
为什么要在将文件写入响应之前删除该文件?通过响应提供文件然后将其删除会更有意义吗?
即。致电
File.Delete(Server.MapPath(fileName));
在回复之后。
你应该尝试:
Response.TransmitFile( Server.MapPath(fileName) );
Response.End();
TransmitFile非常有效,因为它基本上将文件流卸载到IIS,包括可能导致文件缓存在Kernal缓存中(基于IIS的缓存规则)。 到Response.End();
答案 1 :(得分:0)
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "text/plain";
Response.AppendHeader("Content-Disposition", "attachment; filename = " + fileName);
Response.TransmitFile(Server.MapPath("~/foldername/" + fileName));
Response.End();