2013-03-11 27 views
0

我已經將csv文件保存爲/Exports/test.csv。我想讓用戶按下按鈕下載文件。我爲該代碼創建了一個處理程序,如下所示:在.net web應用程序中導出csv文件

<%@ WebHandler Language="C#" Class="Downloadfile" %> 

using System; 
using System.Web; 
using System.Net; 

public class Downloadfile : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     HttpContext.Current.Response.ClearHeaders(); 
     HttpContext.Current.Response.Clear(); 

     context.Response.ContentType = "text/csv"; 
     context.Response.AddHeader("Content-Disposition", 
      "attachment; filename=" + context.Request.QueryString["file"]); 

     context.Response.End(); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return true; 
     } 
    } 
} 

上面的代碼下載該文件,但其文件爲空。我只想下載csv文件及其內容。

+2

所以你的響應標題說響應中有一個文件,但你實際上並沒有發送文件。 – yoozer8 2013-03-11 17:38:53

回答

3

您需要傳輸文件。你可以通過使用TransmitFile方法來做到這一點,或代替寫入磁盤,你可以直接寫入context.Response.OutputStream

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ClearHeaders(); 
    context.Response.Clear(); 
    context.Response.ContentType = "text/csv"; 
    context.Response.AddHeader("Content-Disposition", "attachment; filename=" + context.Request.QueryString["file"]); 
    context.Response.TransmitFile("/Exports/test.csv"); 
    context.Response.End(); 
} 
+0

它的作用是顯示下載的文件內容爲: 2013-03-11 18:44:28

2

我實際上不得不在同一天做同樣的事情,這取決於用戶在「Accepts」標題中傳遞的內容。我使用MSDN article on Media Formatters中的示例,它運行得非常完美。

由於我使用的是MVC的WebApi,所以礦井與你的有點不同,但其基本概念是相同的。

相關問題