2008-09-24 9 views
3

나는 텍스트 파일에 많은 양의 데이터를 버리고 다운로드 할 사용자에게 제시해야하는 내 vb.net 웹 응용 프로그램에 페이지가 있습니다. .net 웹 서버에서 이와 같은 텍스트 파일을 작성하는 가장 효율적인 방법은 무엇입니까?.net 웹 사이트에서 텍스트 파일을 생성하는 가장 좋은 방법은 무엇입니까?

편집 : 아래 질문에 답변하려면이 파일을 한 번 다운로드 한 다음 파일을 버리십시오.

업데이트 : John Rudy와 DavidK의 제안을 서로 붙여 놓았습니다. 완벽하게 작동했습니다. 고마워, 모두!

+0

동일한 파일을 반복적으로 다운로드 할 예정입니까, 아니면 한 번일까요? –

답변

3

답변은 잊어 버린 세미콜론에서 언급했듯이 반복 다운로드가 필요한지 또는 일회 완료되었는지 여부에 따라 다릅니다.

어느 쪽이든, 핵심은 다운로드 창의 내용 유형을 설정하여 다운로드 창이 표시되도록하는 것입니다. 스트레이트 텍스트 출력의 문제점은 브라우저가 자체 창에 데이터를 표시하려고 시도한다는 것입니다.

콘텐츠 형식을 설정하는 핵심 방법은 텍스트가 출력 문자열이고 filename이 파일을 (로컬로) 저장하려는 기본 이름이라고 가정하고 다음과 비슷한 내용을 사용하는 것입니다.

HttpResponse response = HttpContext.Current.Response; 
response.Clear(); 
response.ContentType = "application/octet-stream"; 
response.Charset = ""; 
response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", filename)); 
response.Flush(); 
response.Write(text); 
response.End(); 

이렇게하면 사용자에게 다운로드하라는 메시지가 표시됩니다.

문자 그대로 웹 서버에 파일을 저장해야하는 경우 더 까다로워집니다. 거기에서 System.IO의 클래스를 사용하여 텍스트 파일에 텍스트를 작성하려고합니다. 네트워크 서비스, IUSR_MachineName 및 ASPNET Windows 사용자가 작성하는 경로에 쓰기 권한이 있는지 확인하십시오. 그렇지 않으면 동일한 거래 - 콘텐츠 유형 및 헤더를 사용하여 다운로드를 보장합니다.

필자는 필 요없이 파일을 저장하지 말 것을 권장합니다. 서버에서 직접 그렇게하는 기술이 올바른 아이디어가 아닐 수도 있습니다. (예를 들어 파일을 다운로드 할 때 액세스 제어가 필요한 경우에는 호스팅 환경에 따라 앱 루트 외부에서이 작업을 수행해야합니다.

따라서 알지 못하지만 당신은 일회용 또는 파일 필연적 인 저장 모드에 있고 보안 의미를 모른 채 (서버 측 저장이 정말로 필요한 경우 스스로 해결해야 할 수도 있음), 가능한 최선책입니다. 줘.

4

StringBuilder를 사용하여 파일의 텍스트를 만든 다음 Content-Disposition을 사용하여 사용자에게 보냅니다.

예는 여기에서 찾을 : http://www.eggheadcafe.com/community/aspnet/17/76432/use-the-contentdispositi.aspx

private void Button1_Click(object sender, System.EventArgs e) 
{ 
     StringBuilder output = new StringBuilder; 
     //populate output with the string content 
     String fileName = "textfile.txt"; 

     Response.ContentType = "application/octet-stream"; 
     Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName); 
     Response.WriteFile(output.ToString()); 

} 
+0

인코딩을 확실히 지정해야합니다. 선호하는 UTF-8 –

4

출력 스트림에 직접, 전혀 구축 HttpHandler를 사용하고 텍스트 파일을 제공하지 마십시오

http://digitalcolony.com/labels/HttpHandler.aspx

코드 블록 반쯤 내려가는 것이 좋은 예입니다. 직접 조정할 수 있습니다.

public void ProcessRequest(HttpContext context) 
{ 
    response = context.Response; 
    response.ContentType = "text/xml";  
    using (TextWriter textWriter = new StreamWriter(response.OutputStream, System.Text.Encoding.UTF8)) 
    { 
     XmlTextWriter writer = new XmlTextWriter(textWriter); 
     writer.Formatting = Formatting.Indented; 
     writer.WriteStartDocument(); 
     writer.WriteStartElement("urlset"); 
     writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); 
     writer.WriteAttributeString("xsi:schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"); 
     writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"); 

     // Add Home Page 
     writer.WriteStartElement("url"); 
     writer.WriteElementString("loc", "http://example.com"); 
     writer.WriteElementString("changefreq", "daily"); 
     writer.WriteEndElement(); // url 

     // Add code Loop here for page nodes 
     /* 
     { 
      writer.WriteStartElement("url"); 
      writer.WriteElementString("loc", url); 
      writer.WriteElementString("changefreq", "monthly"); 
      writer.WriteEndElement(); // url 
     } 
     */ 
     writer.WriteEndElement(); // urlset 
    }      
} 
0

서버 측에서 '파일'일 필요는 없습니다. 그것을 파일로 바꾸는 클라이언트입니다.