[英]ASP.NET programmatic file download
因此,我有一個頁面,可以在一個頁面上動態生成一個表,並在大型UpdatePanel中全部鏈接按鈕。 單擊每個鏈接按鈕將導致調用此方法。 目的是使鏈接指向我的數據庫中的文件,並在單擊該鏈接時允許用戶打開/另存為該文件。 這種確切的方法可以在我的網站的另一頁面上使用相同的設置正常工作,但是在此頁面上,我得到了:
Microsoft JScript運行時錯誤:Sys.WebForms.PageRequestManagerParserErrorException:無法解析從服務器收到的消息。 導致此錯誤的常見原因是通過調用Response.Write(),響應過濾器,HttpModules或服務器跟蹤來修改響應。 詳細信息:解析'%PDF-1.3%1 0 ob'附近的錯誤。
public void downloadFile(int fileID)
{
using (SurveyDataContext context = new SurveyDataContext())
{
try
{
var file = context.tblFiles.Single(f => f.FileID == fileID);
Response.Clear();
Response.Buffer = true;
Response.BufferOutput = true;
Response.ContentType = file.MIMEtype;
Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + file.FileName.Trim() + "\"");
Response.AddHeader("Extension", file.FileName.Substring(
file.FileName.LastIndexOf('.') + 1).ToLower());
Response.BinaryWrite(file.FileData.ToArray());
Response.Flush();
Response.End();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.InnerException);
}
}
}
我究竟做錯了什么? 我沒有做任何Response.Writes或任何事情。 此方法是唯一涉及“響應”的方法。 我還有其他方法可以這樣做嗎?
如果此方法不起作用,則應在Response.End之前嘗試Response.Flush,然后在http://dotnetperls.com/response-binarywrite-aspnet中獲得示例代碼。
您可能設置了錯誤的內容類型
是否調用Response.Clear();
在其他一切都清除之前? 否則, 這是一篇博客文章 ,將介紹其他一些疑難解答。
我認為問題是由設置Response.Buffer和Response.BufferOutput引起的。 僅BufferOutput可能就是您想要的。
如果刪除Response.Buffer不起作用,我將嘗試通過設置ContentType =“ application / octet-stream”並注釋掉“ Extension”標頭來簡化一點。 僅文件名上的擴展名就足以用於瀏覽器。
我意識到自己做錯了...我需要使每個鏈接按鈕都具有一個PostBackTrigger。 一旦完成,一切都會以我原來的方式運作。
您有UpdatePanel
或類似的東西嗎?
如果是這種情況,則可以在頁面加載時執行此操作:
ScriptManager _scriptManager = ScriptManager.GetCurrent(this.Page);
_scriptManager.RegisterPostBackControl(Button1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.