"다른 이름으로 저장"대화 상자없이 응답 파일 이름을 설정하는 방법


122

적절한 content-type헤더를 설정하는 일부 응답에서 스트림을 반환하고 있습니다. 내가 찾고있는 동작은 다음과 같습니다.

  • 브라우저가 주어진 콘텐츠 유형의 콘텐츠를 렌더링 할 수있는 경우 브라우저 창에 표시해야합니다.

  • 브라우저가 콘텐츠를 렌더링하는 방법을 모르는 경우 파일 이름이 응답에 제공된 이름이어야하는 "다른 이름으로 저장"대화 상자를 표시해야합니다.

문제는 다음과 같이 Content-Disposition헤더를 설정하는 경우 입니다.

"첨부 파일; 파일 이름 ="myfile.txt ""

브라우저는 항상 "다른 이름으로 저장"대화 상자를 표시합니다.

을 설정하지 않으면 Content-Disposition"다른 이름으로 저장"대화 상자에 사용 된 파일 이름은 제 경우에는 작동하지 않는 URL의 파일 이름입니다.

나는 또한 설정 Content-Disposition을 시도 inline했지만 결과는 동일합니다.

답변:


173

올바른 방법은 다음과 같습니다.

Content-Disposition: inline; filename="myfile.txt"


7
이 답변을 작성할 때 '널리 지원되지 않음'이 무엇을 의미했는지 잘 모르겠으며 FUD 대신 확실한 사실을 제공했으면 좋겠습니다. 방금 IE 6, IE 8, 최신 Chrome 및 최신 Firefox에서 테스트했으며 모두에서 작동합니다. 내가 말할 수있는 한, 요즘 이것을 사용하는 것이 완전히 안전합니다.
Mark Amery 2014-06-01

FireFox 37.0.2 및 Internet Explorer 11.0.18에서 작동하지 않습니다. 다른 이름으로 저장 대화 상자가 나타납니다. Chrome은 작동합니다.
angularsen

3
실제로 Firefox 37.0.2 및 IE 11.0.18 (방금 테스트)에서 모두 작동합니다. 브라우저에서 인라인으로 표시 할 수없는 Content-Type을 사용하고있을 수 있습니다.
Patonza

1
stackoverflow.com/questions/93551/… 에서 다양한 토론에서 다루는 몇 가지 참고 사항 -파일 이름에 공백이있는 경우 파일 이름을 큰 따옴표 ( ")로 묶어야합니다 . 파일 이름에 ASCII가 아닌 문자가있는 경우 수행 할 작업에 대한 토론을 위해 다른 질문을 참조해야합니다.
Christopher Schultz 2015

IE11.0.96의 PDF에서 작동하지 않습니다. 당연히 Chrome은 잘 작동합니다.
user1566694

2

기본적으로 가능한지 잘 모르겠습니다. 보안 문제로 인해 브라우저는 처리 할 수있는 모든 콘텐츠 유형을 전송하지 않고 몇 가지만 전송 Accept-Encoding하므로 시나리오에서 많은 도움이되지 않습니다.

사용자에게 선호하는 정보를 물어보고 해당 정보를 프로필에 저장할 수 있습니다.

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