gpt4 book ai didi

c# - 从 LinkBut​​ton 下载时文件损坏

转载 作者:行者123 更新时间:2023-12-02 22:08:37 25 4
gpt4 key购买 nike

在我的 ASP 代码中,我有一个用于文件上传的 LinkBut​​ton:

<asp:Linkbutton ID="lnkContract" Text="" runat="server" Visible="false" onclick="lnkContract_Click"></asp:Linkbutton>

我设法用 C# 编写了一个代码,触发了 lnkContract_Click 中的文件下载。这里:

protected void lnkContract_Click(object sender, EventArgs e)
{
string[] strFileType = lnkContract.Text.Split('.');
string strPath = Server.MapPath("~") + FilePath.CUST_DEALS + lnkContract.Text;
Open(lnkContract.Text, strFileType[1], strPath);
}


private void Open(string strFile, string strType, string strPath)
{
FileInfo fiPath = new FileInfo(@strPath);

//opens download dialog box
try
{
Response.Clear();
Response.ContentType = "application/" + strType.ToLower();
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + strFile + "\"");
Response.AddHeader("Content-Length", fiPath.Length.ToString());
Response.TransmitFile(fiPath.FullName);
HttpContext.Current.ApplicationInstance.CompleteRequest();
Response.Clear();
}//try
catch
{
ucMessage.ShowMessage(UserControl_Message.MessageType.WARN, CustomerDefine.NOFILE);
}//catch if file is not found
}

当我点击 LinkButton该文件会自动下载,但当我打开该文件时,它已损坏(或者如果文件是 .jpeg,则该文件显示“x”)。我哪里出错了?

更新LinkBut​​ton 在 UpdatePanel 下。

最佳答案

将第二个 Response.Clear(); 替换为 Response.End(); 以刷新缓冲区并将所有数据发送到客户端。

但是您的代码会遇到问题,即 Response.End() 实际上会导致线程中止异常,因此,您应该更具体地描述捕获的异常。

更新:

在您的评论中,您提到这是在 UpdatePanel 中运行的。在那种情况下,这将不起作用。您将不得不强制该链接按钮执行常规回发而不是 ajax 回发。

方法如下:https://stackoverflow.com/a/5461736/1373170

关于c# - 从 LinkBut​​ton 下载时文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15737337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com