2013-07-08 54 views
0

我有一個PHP通過FTP協議掃描遠程NAS硬盤上的文件,生成一個JSON文件,然後通過JavaScript我在瀏覽器中列出這些文件。強制下載在FTP://鏈接

當用戶點擊指向mp4,jpg和許多瀏覽器已知格式的鏈接時,瀏覽器將打開te內容而不是下載它。

現在,我知道使用PHP或.htaccess我可以更改標頭強制瀏覽器下載文件,但該文件位於遠程位置,只能通過FTP訪問,因此我無法運行PHP或.htaccess在裏面。

我試圖在PHP中,這頭變化:

header("Content-Type: application/octet-stream"); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-Disposition: attachment; filename=\"$file\""); 

header("Content-Description: File Transfer"); 
header("Content-Type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=\"$file\""); 

header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=$file"); 
header("Content-Type: application/image"); 
header("Content-Transfer-Encoding: binary"); 

所有結尾:

header("Location: $url"); 

(網址爲ftp://user:[email protected]/folder/file.mp4) 但它總是打開文件瀏覽器,而不是下載(上當然也意識到了文件擴展名)

任何想法的?謝謝

+0

您生成的URL是否直接指向NAS?如果是這樣,你可以讓你的網絡應用程序充當NAS和瀏覽器之間的中間人,在這種情況下,你將能夠添加任何你可能需要的頭。 – Tarik

回答

0

使用重定向時,以前的標頭可能不起作用。相反,你更好地通過PHP服務他們而不是重定向:

header("Content-type: octet/stream"); 
header("Content-disposition: attachment; filename=".$file); 
header("Content-Length: ".filesize($file)); 
readfile($file); 

但請注意,這將使用您自己的帶寬。但是,沒有任何方法可以強制遠程主機上的行爲。

+0

我想到了這一點,但我只能運行一個2分鐘的php文件,如果用戶正在下載一個視頻,它最有可能需要更多的時間,它會超時。不過,我認爲這是唯一的選擇 – Juan