문제

응답 스트림에 데이터를 덤프할 때 파일 이름을 어떻게 지정합니까?

지금은 다음을 수행하고 있습니다.

byte[] data= GetFoo();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";            
Response.BinaryWrite(data);
Response.End();

위의 코드를 사용하면 저장할 파일 이름으로 "foo.aspx.pdf"가 표시됩니다.저장할 파일 이름을 지정하기 위해 응답에 헤더를 추가할 수 있었던 것을 기억하는 것 같습니다.

도움이 되었습니까?

해결책

헤더에 콘텐츠 처리를 추가합니다.

Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");

다른 팁

참고로..."첨부 파일" 대신 "인라인"을 사용하면 파일이 IE에서 자동으로 열립니다.사용자에게 열기/저장 대화상자를 표시하는 대신.

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");

어떤 이유로 대부분의 답변은 파일 이름 값을 인코딩하려고 시도하지 않는 것 같습니다.파일에 공백, 세미콜론, 따옴표가 포함되어 있으면 제대로 인식되지 않을 수 있습니다.

를 이용하시면 될 것 같습니다 ContentDisposition 올바른 헤더 값을 생성하는 클래스:

Response.AppendHeader("Content-Disposition", new ContentDisposition
{
    FileName = yourFilename
}.ToString());

확인하실 수 있습니다 소스 코드 ContentDisposition.ToString() 올바르게 인코딩하려고 하는지 확인합니다.

경고:파일 이름에 대시(하이픈 아님)가 포함되면 충돌이 발생하는 것 같습니다.나는 아직 이것을 조사하는 것을 귀찮게하지 않았습니다.

 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top