2009-07-02 3 views
25

보고서를 작성한 다음 사용자가 로컬 컴퓨터에 저장하라는 메시지를 표시해야합니다. 마지막으로 웹 서버에 파일을 작성한 다음 Response 개체를 통해 클라이언트로 보냈습니다. C# Asp.net 클라이언트에 파일 쓰기

클라이언트 질문은

page.Response.WriteFile(path); 

에 보낼

TextWriter tw = new StreamWriter(filePath); 

웹 서버에 생성, 웹 서버에 실제 파일의 작성을 생략하고 오른쪽에서 갈 수있는 방법이 있습니까 응답에 문서를 나타내는 객체

답변

25

당신은 텍스트 파일을 작성하려는 경우 작동이 물론이

Response.ContentType = "text/plain"; 
Response.OutputStream.Write(buffer, 0, buffer.Length); 
Response.AddHeader("Content-Disposition", "attachment;filename=yourfile.txt"); 

처럼 Response.ContentType을 사용할 수 있습니다. 예를 들어 .doc을 작성하려는 경우 ContentType을 "application/msword"등으로 변경합니다.

+0

이 코드는 내 브라우저에 쓰기 기능을 씁니다. 프롬프트가 없습니다. IReport rpt = new ContxReport(); 문자열 보고서 = rpt.makeReport(); ASCIIEncoding encoding = 새 ASCIIEncoding(); byte [] encodedReport = encoding.GetBytes (report); 응답.ContentType = "text/plain"; Response.OutputStream.Write (encodedReport, 0, encodedReport.Length); Response.AddHeader ("Content-Disposition", "inline; filename = shit.csv"); Response.End(); – jim

+1

또한 쓰기 전에 모든 헤더를 설정해야합니다. – Talljoe

+1

*** 버퍼 ***이란 무엇입니까? – Kiquenet

16

하실 수 있습니다.

이 시도 :

Table oTable = new Table(); 
//Add data to table. 

Response.Clear(); 
Response.Buffer = true; 
Response.ContentType = "application/vnd.ms-excel"; 
Response.AddHeader("Content-Disposition", "attachment;filename="test.xls""); 
Response.Charset = ""; 
this.EnableViewState = false; 
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); 
System.Web.UI.Html32TextWriter oHtmlTextWriter = new System.Web.UI.Html32TextWriter(oStringWriter); 
0Table.RenderControl(oHtmlTextWriter); 
Response.Write(oStringWriter.ToString()); 
Response.End(); 

이 열거 나 Test.xls를 파일을 저장하라는 메시지를 표시 줄 것이다. 마찬가지로 테이블 대신 다른 ASP.NET 개체를 제공 할 수 있습니다.

+0

StringWriter를 만드는 대신 Response.Output을 사용할 수 있어야합니다. – Talljoe

+0

2 개의 질문이 있습니다. 1) 해당 파일을 다시 시작할 수 있습니까? 2) IDM과 같은 다운로드 관리자를 사용하는 경우 다중 연결이 가능합니까? – shashwat

+2

@ShashwatTripathi 잘 모르겠습니다. 이것은 내가 오래 전에 사용했던 코드 조각입니다. IMHO, 이력서 또는 여러 다운로드 연결을 지원하지 않습니다. –

5

예.

page.Response.WriteFile(yourData, 0, yourData.Length); 
+0

2 개의 질문이 있습니다. 1) 해당 파일을 다시 시작할 수 있습니까? 2) IDM과 같은 다운로드 관리자를 사용하는 경우 다중 연결이 가능합니까? – shashwat

5

질문에 대한 정확한 답변은 보고서를 체계적으로 구성한 방법 (즉, 귀하가 말하는 "개체")에 달려 있습니다. 단일 문자열이있는 경우 Response.Write를 사용하여이 문자열을 쓸 수 있습니다. TextWriter가 필요한 경우 Response.Output은 디스크에 쓰는 것을 건너 뛸 수 있고 WriteFile을 사용하여 원하는대로 할 수 있습니다. 또한 콘텐츠가 바이너리 인 경우 Response.OutputStream을 사용할 수 있습니다.

사용자가 파일 저장 대화 상자를 볼 수있게하려면 Response.AddHeader ("Content-Disposition", "attachment")를 설정할 수도 있습니다. 그러나 Content-Disposition이 반드시 준수되지는 않으므로 사용자는 브라우저에서 직접 열어 보고서를 가져올 수 있습니다. 실제 내용을 출력하기 전에 헤더를 설정하는 것을 잊지 마십시오!

또한 보고서의 형식에 따라 Response.ContentType을 text/plain, text/csv 또는 기타 무엇이든지 적절한 것으로 설정할 수 있습니다. 올바른 마임 유형은 the IANA site입니다.