2011-02-08 1 views
1

FireFox를 살펴 보겠습니다. 그것은 새로운 페이지로 링크, 당신은 그것을 클릭 - "무료 다운로드 파이어 폭스 3.6"링크를 클릭 한 후 "thanks_for_downloading.html"+ "파일 저장 ..."을 수행하는 표준 방법은 무엇입니까?

: "감사합니다 파이어 폭스를 다운로드하는 다운로드가 몇에서 시작한다!

그들은 액션 버튼에 좋은 큰 전화를 초. "

다음 몇 초 후에 팝업 : "FIREFOX.exe -이 파일을 저장하거나 삭제 하시겠습니까?"

이것은 웹 응용 프로그램에 대한 꽤 표준 다운로드 동작입니다. 가장 간단한 방법으로 어떻게 이루어 집니까?

답변

3

이 두 부분이 있습니다

  1. 브라우저를 강제로이 파일을 표시하려고하지 말고 파일을 다운로드하십시오 (.exe는 문제가 없지만 이미지, 동영상 또는 HTML 파일로도 할 수 있습니다).
  2. 브라우저에 파일 다운로드를 요청하는 메시지가 표시됩니다.

페이지를 변경하지 않고 브라우저가 파일을 다운로드하도록하려는 경우가 있습니다. 우리는이 같은 링크를 만들 수 있으며, 예상대로 작동합니다 :

<a href="/download.zip">Download File</a> 
브라우저가 아마 zip 파일을 처리하는 방법을 알고하지 않기 때문에 똑바로라는 이름의 파일에 "download.zip"다운로드

URL에있는 파일 이름 다음에. 당신은하지만, 대신 JPG를 다운로드하고 싶다면,이 작동하지 않을 것입니다 :

<a href="/images/sunset.jpg">Save this Sunset!</a> 

브라우저는 JPEG를 표시하는 방법을 알고, 그래서 페이지를 리디렉션 및 JPEG를 보여줍니다. 이제 브라우저에 표시하지 말고 대신 다운로드하십시오. 이를 위해서는 서버의 응답에 특정 HTTP 헤더를 보내야합니다.

아파치는 .htaccess에서 헤더를 지정하여 처리 할 수 ​​있지만 특정 기술을 사용하지 않고 메커니즘에 관해 이야기하기로합니다.

그래서 우리는 이미지와 함께 브라우저에 다음과 같은 헤더를 보내

Content-disposition: attachment; filename=the_sunset_of_a_lifetime.jpg; 

첫 번째 헤더, content-disposition, 우리는 파일이 첨부되고 싶어 브라우저를 알려줍니다, 또는 다른 말로, 저장해야하며 표시되지 않아야합니다. filename 속성은 파일을 저장하는 데 사용할 이름을 지정합니다 ("sunset.jpg"대신 파일 이름은 "the_sunset_of_a_lifetime.jpg"입니다).

이제 "일몰을 다운로드하십시오.jpg "파일은 우리가 원하는 것처럼 작동하지만 사용자가 링크를 클릭하지 않고 브라우저에서 다운로드하여"감사 "페이지를 표시하고 다운로드가 시작되도록 요청하려면 어떻게해야합니까? 간단한 <meta> 태그는 트릭을 수행 할 수 있습니다 브라우저를 말하는 것은 시간의 집합 기간 후에 페이지를 리디렉션 :

<meta http-equiv="refresh" content="2;url=/images/sunset.jpg"> 

head에서 해당 메타 태그와 페이지가로드가로드하려고 후 2 초간 기다린 것을 "감사" 마지막 단계에서 설정 한 헤더를 가져와 표시하는 대신 다운로드하여 사용자가 원하는대로 페이지에 머무르게합니다.

+0

고마워요.하지만이 부분에 대해서는 조금 명확하지 않습니다. "그래서 우리는 다음 헤더를 이미지와 함께 브라우저에 보냈습니다 ..."그 헤더는 어느 파일에 저장됩니까? 그리고 그 파일에서? – cksubs

+0

HTTP 헤더는 브라우저 (요청 헤더)와 서버 (응답 헤더)에 의해 보내집니다. 아파치를 사용하고 있다면 아파치가 특정 파일이나 디렉토리에 대한 요청에 임의의 헤더를 추가하도록 지시하는 지시어를 만들 수 있습니다. 자세한 정보는 http://httpd.apache.org/docs/2.2/mod/mod_headers.html을 참조하십시오. 필요한 경우 .htaccess/httpd.conf 설정을 만드는 데 도움이되는 별도의 질문을 만들어야합니다. – coreyward

+0

확인. 그리고 헤더는 브라우저가 일반적으로 열어 두는 파일 (예 : .jpg)을 처리 할 때만 필요하지만 대신 강제로 다운로드하려고합니까? .exes 및 기타 브라우저가 아닌 파일 형식에 헤더가 필요합니까? .exe를 사용하고 있다면 메타 태그가 작동합니까? – cksubs

1

클릭 유도제 버튼은 '감사합니다'페이지로 연결되는 일반적인 링크입니다. 그런 다음 "감사합니다"페이지에서 javascript를 사용하여 "window.location"속성을 파일의 URL로 설정하여 다운로드중인 파일로 사용자를 리디렉션하십시오. thanks_for_downloading.html

2

예 내용 : 다운로드 링크가 thanks_for_downloading.html 페이지로 바로 연결되는 링크가

<strong>Thanks for downloading XY</strong> 

<script type="text/javascript"> 
window.onload = function(){ 
    window.location.href = "path/to/XY.exe"; 
}; 
</script> 

입니다

+0

멋지고 감사합니다. 멋지고 간단합니다. 거기에 있습니까? 경유와 반대되는 방식으로 그것을하는 프로/죄수 (다른 답변) 메타 태그 등? – cksubs

+0

그들은 똑같이하고 있습니다. 사용자가 자바 스크립트를 사용할 수 없게되면 내 메소드가 작동하지 않지만 메타 태그가이를 수행합니다. – Floern

관련 문제