[英]C# ASP.NET 3.5 content-disposition file download problems
我有一個存儲一些文件的SQL數據庫。
用戶可以登錄該應用程序,並查看其文檔列表。
當在文檔的gridview中單擊鏈接按鈕下載時,我從數據庫中獲取文件,將其寫入文件系統,然后執行此代碼。
System.IO.FileInfo file = new System.IO.FileInfo(System.Configuration.ConfigurationManager.AppSettings["UploadPath"] + DocumentName);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Cookies.Clear();
Response.Cache.SetCacheability(HttpCacheability.Private);
Response.CacheControl = "private";
Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
Response.AppendHeader("Content-Length", file.Length.ToString());
Response.AppendHeader("Pragma","cache");
Response.AppendHeader("Expires", "60");
Response.ContentType = GetContentType(file.Extension);
Response.AppendHeader("Content-Disposition",
"inline; " +
"filename=\"" + file.Name + "\"; " +
"size=" + file.Length.ToString() + "; " +
"creation-date=" + DateTime.Now.ToString("R") + "; " +
"modification-date=" + DateTime.Now.ToString("R") + "; " +
"read-date=" + DateTime.Now.ToString("R"));
我的GetContentType()方法只返回我允許的文件的相應文件類型“application / pdf,application / msw0rd等。
我的問題是,當文件被保存時,它是網頁本身,而不是文件系統中的文件。 在谷歌瀏覽器中,它在文件名的末尾添加.htm擴展名,我猜是因為它知道它是一個網頁?
無論如何,一個偉大的第一步是獲取實際文件,而不是他們所坐的HTML網頁的副本!
謝謝。
代替
Response.AppendHeader(“Content-Disposition”,“inline;”+“filename =
采用
Response.AddHeader(“content-disposition:”,“attachment; filename =
你是如何發送文件的實際內容的?
我通常使用Response.TransmitFile方法,它基本上打開文件並將其內容發送到Response.OutputStream
您是否嘗試將內容處置設置為“附件”而不是“內聯”? 我相信瀏覽器會提示用戶打開或保存文檔。
此外,您通常可以通過使用BinaryWrite方法將數據庫中的字節流直接寫入Response對象來繞過文件系統...這也是您可能希望在ASPX頁面上使用HTTP處理程序進行調查的情況您不需要擔心清除響應等等。過去我在頁面上使用隱藏的iframe,然后使用Javascript將其src設置為將文檔ID作為參數的HTTP處理程序取得了成功在QueryString上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.