2011-09-14 4 views
2

텍스트 상자에서 csv 파일을 만든 다음 사용자에게 보내려고합니다. 내가 전에 파일로 응답 해본 적이, 전송 무엇asp.net의 csv 파일로 응답

Response.Clear(); 
      Response.ContentType = "text/csv"; 
      Response.AppendHeader("Content-Disposition", 
       string.Format("attachment; filename={0}", DateTime.Now)); 

      Response.Write(TextBox_Data.Text); 
      Context.Response.End(); 

빈 XML 파일이며이 작업을 수행하는 이유 궁금 해요 : 이것은 내 코드는 지금까지입니까?

var writer = File.CreateText("C:\\file.csv"); 
      writer.WriteLine(TextBox_Data.Text); 

      Context.Response.Clear(); 
      Context.Response.AppendHeader("content-disposition", "attachment; filename=" + DateTime.Now + ".csv"); 
      Context.Response.ContentType = "text/csv"; 
      Context.Response.Write("C:\\file.csv"); 
      Context.Response.Flush(); 
      Context.Response.End(); 

당신이 다음 코드는 나를 위해 일한 답 :

+0

당신은 사용자가 텍스트 상자에 넣습니다 어떤에서 CSV 파일을 만든 다음이 사용자에게 이메일을 보내거나 사용자가 자동으로 다운로드가하려고? 이 코드를 벗어난 이유와 이유에 대해 좀 더 자세히 설명해 주시겠습니까? –

+0

다른 경로에 쓰기를 시도하십시오. 아마도 당신의 프로필 경로. 근원에 쓰는 것은 위험합니다. – ApolloSoftware

+0

사실, 필자는 여러 줄로 된 텍스트 상자에서 다운로드 할 수있는 CSV 파일을 만들려고합니다. 실제로 파일을 내 드라이브에 넣는 것에 신경 쓰지 않고 텍스트 상자의 텍스트와 함께 다운로드 할 수있는 CSV 파일 만 필요합니다. –

답변

6

이 있으면 알려주세요 :

는 또한 작동하지 않았다 다음을 시도했다. 파일 확장자가 누락되었을 수 있습니다.

Response.Clear(); 
Response.ContentType = "text/csv"; 
Response.AppendHeader("Content-Disposition", 
       string.Format("attachment; filename={0}.csv", DateTime.Now)); 
Response.Write(TextBox_Data.Text); 
Context.Response.End(); 
+0

이 코드는 이스케이프 문자 같은 것을 처리하지 않는다는 것을 명심하십시오. 그러나 나는 그것이 여러분이 기대하는 것이라고 가정합니다. – joshb

+0

아 ... 이 확장 기능 ("attachment; filename = {0}", DateTime.Now + ". csv"))을 작성했습니다. 이것은 내 고향의 PC에서 완벽하게 작동합니다. 정말 고마워요! –

2

으로 Response.End()의 사용에 관한 joshb의 대답에 그냥 보완 :

MSDN not recommend이 오류가 아닌 경우에 Response.End()의 사용, 어떤 경우에는 실제로 클라이언트가 발생할 수 않습니다 일부 데이터를 잃게됩니다. 내 경우

때로는 다운로드 CSV는 마지막 줄의 마지막 바이트를 잃어 버릴 것, 그래서 Response.End()을 제거하고 대신

HttpContext.Current.ApplicationInstance.CompleteRequest() 

을 사용하고, 난 아무것도 쓸 수있는 페이지의 Render(HtmlTextWriter writer) 메소드를 오버라이드 (override)했다 csv가 이미 작성되었으므로 요청에 대해

public class PageBase : Page 
{ 
    private bool performRegularPageRender = true; 

    protected override void Render(HtmlTextWriter writer) 
    { 
     if (performRegularPageRender) 
      base.Render(writer); 
    } 

    public void SkipRegularPageRendering() 
    { 
     performRegularPageRender = false; 
    } 
} 

더 많은 정보/크레딧 : msdn blog; Is Response.End() considered harmful?; PostBack and Render Solutions? Overrides

관련 문제