HTTP 응답으로 CSV 파일을 보내야합니다. 출력 응답을 CSV 형식으로 설정하려면 어떻게해야합니까?
작동하지 않습니다.
Response.ContentType = "application/CSV";
HTTP 응답으로 CSV 파일을 보내야합니다. 출력 응답을 CSV 형식으로 설정하려면 어떻게해야합니까?
작동하지 않습니다.
Response.ContentType = "application/CSV";
답변:
사용하는 text/csv
것이 가장 적합한 유형입니다.
Content-Disposition
응답에 헤더를 추가하는 것도 고려해야 합니다. Internet Explorer에서 text / csv를 호스팅 된 Excel 인스턴스로 직접로드하는 경우가 종종 있습니다. 이것은 바람직한 결과 일 수도 있고 아닐 수도 있습니다.
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");
위와 같이하면 "다른 이름으로 저장"대화 상자가 나타나게되어 원하는 것일 수 있습니다.
수년 동안 나는 내가 알고있는 모든 브라우저에서 훌륭하게 작동하는 완벽한 헤더 세트를 연마 해 왔습니다.
// these headers avoid IE problems when using https:
// see http://support.microsoft.com/kb/812935
header("Cache-Control: must-revalidate");
header("Pragma: must-revalidate");
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=$filename.csv");
이 다른 마임 유형 중 하나를 시도하십시오 (여기 : http://filext.com/file-extension/CSV )
또한 MIME 유형 은 대소 문자를 구분할 수 있습니다.
그냥 그런 식으로 사용하십시오
Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();
return new EmptyResult()
경우 파일 이름을 고수하기 위해 컨트롤러 메소드를 종료해야합니다 . 그렇지 않으면 IE는 파일을로 저장하려고 시도합니다 ActionName.htm
.
위에서 설명한대로 컨텐츠 유형 및 컨텐츠 처리를 설정하면 브라우저마다 다른 결과가 나타납니다.
IE8 : 원하는대로 다른 이름으로 저장 대화 상자 및 기본 앱으로 Excel. 100 % 좋습니다.
Firefox : 다른 이름으로 저장 대화 상자가 표시되지만 Firefox는 스프레드 시트인지 전혀 모릅니다. Visual Studio에서 열 것을 제안합니다! 50 % 좋음
크롬 : 힌트는 완전히 무시됩니다. CSV 데이터가 브라우저에 표시됩니다. 0 % 양호
물론이 모든 경우에 브라우저에서 브라우저를 언급하고 있으며 mime / 응용 프로그램 매핑을 사용자 정의하지 않아도됩니다.
C # MVC 4.5의 경우 다음과 같이해야합니다.
Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + fileName + ".csv\"");
Response.Write(dataNeedToPrint);
Response.End();
return new EmptyResult(); //this line is important else it will not work.