CSV 형식의 응답 컨텐츠 유형


328

HTTP 응답으로 CSV 파일을 보내야합니다. 출력 응답을 CSV 형식으로 설정하려면 어떻게해야합니까?

작동하지 않습니다.

Response.ContentType = "application/CSV";

답변:


491

사용하는 text/csv것이 가장 적합한 유형입니다.

Content-Disposition응답에 헤더를 추가하는 것도 고려해야 합니다. Internet Explorer에서 text / csv를 호스팅 된 Excel 인스턴스로 직접로드하는 경우가 종종 있습니다. 이것은 바람직한 결과 일 수도 있고 아닐 수도 있습니다.

Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");

위와 같이하면 "다른 이름으로 저장"대화 상자가 나타나게되어 원하는 것일 수 있습니다.


2
해당 문자열을 작성하기 위해 System.Net.Mime.ContentDisposition 객체를 사용하고 싶습니다.
Ronnie Overby


62

text/csv컨텐츠 유형으로 사용하십시오 .


48

수년 동안 나는 내가 알고있는 모든 브라우저에서 훌륭하게 작동하는 완벽한 헤더 세트를 연마 해 왔습니다.

// 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");

7
application / vnd.ms-excel을 사용하는 경우 osx에서 사파리는 ".xls"파일 확장자를 추가합니다
Luke Smith

28

이 다른 마임 유형 중 하나를 시도하십시오 (여기 : http://filext.com/file-extension/CSV )

  • 텍스트 / 쉼표로 구분 된 값
  • text / csv
  • 응용 프로그램 / csv
  • 응용 프로그램 / 엑셀
  • application / vnd.ms-excel
  • 응용 프로그램 /vnd.msexcel

또한 MIME 유형 대소 문자를 구분할 있습니다.


15

그냥 그런 식으로 사용하십시오

Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();

파일 이름을 큰 따옴표로 묶으면 클라이언트가 Firefox 인 경우이 문제가 해결되었습니다.
Graham

1
MVC 컨트롤러에서 이것을 사용하는 return new EmptyResult()경우 파일 이름을 고수하기 위해 컨트롤러 메소드를 종료해야합니다 . 그렇지 않으면 IE는 파일을로 저장하려고 시도합니다 ActionName.htm.
3Dave

5

ASP.net MVC에서 a FileContentResultFile메소드를 사용할 수 있습니다 .

public FileContentResult DownloadManifest() {
    byte[] csvData = getCsvData();
    return File(csvData, "text/csv", "filename.csv");
}

3

IE의 문제는 반환 데이터를 스니핑하고 전송 된 내용 유형에 대해 스스로 생각한다는 것입니다. 데이터 trasnfer 압축을 사용하고 있기 때문에 텍스트 파일에 대해 항상 saveAs 대화 상자를 여는 등 여러 가지 부작용이 있습니다. 해결책은 (php 코드)입니다 ...

header('X-Content-Type-Options: nosniff');

2

위에서 설명한대로 컨텐츠 유형 및 컨텐츠 처리를 설정하면 브라우저마다 다른 결과가 나타납니다.

IE8 : 원하는대로 다른 이름으로 저장 대화 상자 및 기본 앱으로 Excel. 100 % 좋습니다.

Firefox : 다른 이름으로 저장 대화 상자가 표시되지만 Firefox는 스프레드 시트인지 전혀 모릅니다. Visual Studio에서 열 것을 제안합니다! 50 % 좋음

크롬 : 힌트는 완전히 무시됩니다. CSV 데이터가 브라우저에 표시됩니다. 0 % 양호

물론이 모든 경우에 브라우저에서 브라우저를 언급하고 있으며 mime / 응용 프로그램 매핑을 사용자 정의하지 않아도됩니다.


Firefox에서 Visual Studio로 열기를 원하는 경우 CSV가 아닌 HTML을 내보내는 것입니다.
Martin

이것은 2014 년의 경우가 아닌 것처럼 보입니다. 나를 위해 모두 잘 작동했습니다.
MikeKulls

"위에 설명 된대로"
xhienne

2

'myfilename.cvs'앞에 '/'문자를 삽입하는 것이 좋습니다.

Response.AddHeader("Content-Disposition", "attachment;filename=/myfilename.csv");

더 나은 결과를 얻을 수 있기를 바랍니다.


0

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.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.