asp.net에서 동적 PDF의 파일 이름 지정
문제
응답 스트림에 데이터를 덤프할 때 파일 이름을 어떻게 지정합니까?
지금은 다음을 수행하고 있습니다.
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 & ";")
제휴하지 않습니다 StackOverflow