簡體   English   中英

C#ASP.NET 3.5內容處理文件下載問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM