iT邦幫忙

0

force download問題

php

header("Content-type:application/pdf");
header("Content-Disposition: attachment; filename=xxx.pdf");
readfile("old.pdf");

這是一段強迫下載pdf的code,我想請教的是上面那個檔案格式的宣告
我拿掉以後好像沒有任何影響,不知道他存在的作用為何

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

4
fillano
iT邦超人 1 級 ‧ 2010-06-22 01:13:39
最佳解答

<pre class="c" name="code">header("Content-Disposition: attachment; filename=xxx.pdf");

請參考:
RFC 2183

Content Disposition不是HTTP(RFC 2616)的一部分,而是MIME(RFC 2045~2048)的擴充。attachement是要求MUA不要直接顯示,需要另外處理(你可以改成inline試試看),filename這個參數是指定如果要當成檔案處理的話,檔名是什麼。(另外也可以送出檔案的產生、修改、讀取時間與大小等資訊)

強迫下載並存成檔案應該是瀏覽器為了安全起見的處理方式,這並不是硬性規定。但是既然都已經用預設的檔名來存檔了,那送出Content-Type就沒多大意義...簡單地說就是這樣吧。

RFC 2183文件裡面有更複雜的例子,不過multi-part的response並不合http的文法,瀏覽器應該是沒辦法處理的。

chan15 iT邦新手 2 級 ‧ 2010-06-22 12:23:03 檢舉

不這樣下的話瀏覽器會直接打開如pdf的檔案耶
這樣寫的話就會變成下載,所以在網路上都被當成強迫下載的demo
還是有誤會?

fillano iT邦超人 1 級 ‧ 2010-06-22 15:52:45 檢舉

應該沒誤會吧。

2
shunyuan
iT邦研究生 1 級 ‧ 2010-06-21 19:25:21

chan15提到:
header("Content-type:application/pdf");

據我所知,這個欄位是提供給 Client Browser 啓動對應的 Application,舉個例,FireFox 點 PDF 會啓動 Acrobat reader,但是對於 Download 這個 Action,多半的 Browser default 都是存到 download 目錄,很少 IE 會下載會自動開啓。

chan15 iT邦新手 2 級 ‧ 2010-06-21 20:28:55 檢舉

所以我的目的是force download的話根本不該宣告吧?

我要發表回答

立即登入回答