2011-03-04 4 views
14

JS 또는 Javascript를 통해 강제로 다운로드 할 수 있습니까? 즉, 웹 페이지는 브라우저의 새 탭에서 파일을 열지 말고 팝업으로 사용자가 "다른 이름으로 저장"을 선택하도록합니다. 또는 ???js 또는 쿼리를 통해 강제 다운로드

+3

이 중 중복 되었습니까? http://stackoverflow.com/questions/727144/browser-download-file-prompt-using-javascript –

+0

사실입니다. 유용한 질문에 대한 좋은 예입니다. 질문 제목이 똑같은 것을 말하고 있지만 상당히 다르게 표현되기 때문입니다. –

답변

11

당신은 자바 스크립트에서 해당 동작을 강요 할 수는 HTTP 헤더는 서버 측에서 설정해야 PDF 파일의 URL :

location.replace('path/to.pdf'); 

방금 ​​앵커의 새로운 속성 다운로드를 사용할 수있는 HTML5의 출현으로

+0

이제 [download] (http://caniuse.com/#search=download) 속성을 사용할 수 있습니다. – mpen

+0

@ 예, 그렇습니다. 답변이 있습니다. 질문 당시, 그것은 가능하지 않았다 –

+1

그래. 답을 바꾸어야한다고 말하는 것은 아니지만 맨 위에 나타나고 받아 들여집니다. 그래서 나는 사람들이 더 게으르다는 것을 알려주고 있습니다 :-) – mpen

4

아니요, 가능하지 않으며 신에게 감사합니다. 그렇지 않으면 당신이 모르는 사이에 웹 사이트를 방문 할 때 어떤 종류의 파일을 컴퓨터에 저장할 수 있는지 상상해보십시오.

@Paul D. White는 주석 섹션에서 브라우저와 관련된 기본 프로그램과 함께 파일을 인라인으로 열기를 원할 경우 서버가 Content-Disposition HTTP 헤더를 보낼 수 있다고 지적했습니다. 예 :

Content-Disposition: inline; filename=foo.pdf 
+1

그래서 어떻게 할 수 있습니까? – Shaun

+0

맞음 : HTTP 응답 헤더 (특히'content-disposition : attachment')를 설정함으로써 서버 측에서만 할 수 있습니다. 페이지가 클라이언트에서 열리면 정의에 따라 HTTP 응답이 이미 처리되었습니다. –

+0

asker는 새 탭을 열지 않고 대화 상자에서 사용하려고하고있다는 것을 분명히 말합니다. 그래서 정확히 답장하지 않습니다. – gnur

2

아니요 JQuery/JavaScript에서만 사용할 수 없습니다.

Content-Type (HTTP 헤더)과 함께 파일을 반환하는 서버 측 스크립트가 있어야 브라우저가 요청한 파일을 다운로드하게됩니다. Content-Type에 가능한 값은 application/force-download입니다.

Content-disposition=attachment; filename=some.file.name 

문제를 해결할 수있는 방법은 당신의 AJAX 방법은로 사용자를 리디렉션하도록하는 것입니다 :

37

(위의 HTTP 헤더는 PDF 설정해야합니다) 꼬리표.

코드는

그것은 파이어 폭스와 크롬의 최신 버전에서 작동
<a download="name_of_downloaded_file" href="path/to/the/download/file"> Clicking on this link will force download the file</a> 

같이 보일 것입니다. IE에서 확인하지 않았 음을 언급해야합니까? : P

는 sstur에서 코멘트 후 다운로드 속성을 편집

+2

다운로드 할 값을 지정할 수 있습니다 속성에 저장되며 다운로드시 기본 파일 이름이됩니다. – sstur

+1

사실이 점진적인 해결책이지만, 2013 년 11 월 현재 IE 또는 대부분의 휴대 기기에서 지원되지 않습니다. (출처 : http://caniuse.com/#feat=download) – mcranston18

+1

Opera 나 IE에서는 작동하지 않지만, 여전히이 솔루션을 직접 사용하고 있습니다. –

13

동적 링크를 만들고 파일로 힘 다운로드 다운로드 속성을 클릭하십시오

var anchor = document.createElement('a'); 
anchor.href = this.props.download_url; 
anchor.target = '_blank'; 
anchor.download = this.props.file_name; 
anchor.click(); 

내가도 추가하지 않은 통지를 타고 그것은 DOM에, 그래서 그것은 빠르다.

P.S download 속성은 IE에서 작동하지 않습니다. 하지만 그것은 새로운 탭에서 링크를 열 것입니다. http://caniuse.com/#feat=download

관련 문제