2012-08-08 37 views
3

是否可以強制文件下載到用戶的瀏覽器(當然標準對話框提示)?由服務器觸發。基本上我正在考慮將文件推送到來自服務器文件系統的瀏覽器。或者,這是不可能的,因爲安全沙箱? 如果這是不可能的,是否有與此非常接近的另一種方式?我不想在沒有用戶同意的情況下發送文件。我可以想到兩步辦法,首先提示用戶輸入數據,然後讓用戶點擊一個OK按鈕觸發下載,但在下載結束時,用戶會得到另一個確認框(要求打開的標準下載提示或保存)。如果可能的話,這將是很好的一步。是否可以觸發文件下載到用戶的瀏覽器?

回答

3

使用ajax json腳本輪詢服務器每5秒或10秒, 當服務器有一個文件準備好迴應一個肯定的答案「我有一個文件」有一個iframe移動到該文件是,然後將其作爲正常下載進行處理。

我已經提供了一個我應該怎樣認爲它應該工作的小例子,所以你有一些工作。我沒有檢查它的錯誤,但它更多的是概念證明。

jQuery的例子(沒有JSON):

$.ajax('/myserverscript.php?fileready=needtoknow').done(function(data) 
    { 
    if(data.indexOf("I have a file") != -1) 
     { 
     xdata = data.split('\n'); 
     data = xdata[1]; 
     document.getElementById('myiframe').location.href = data; 
     } 
    }); 

PHP代碼

$x = filecheckingfunction();// returns false if none, returns url if there is a file 
if($x !== false) 
    { 
    echo 'I have a file\n'; 
    echo $x; 
    } 
+0

+1無需離開頁面即可下載。 – 2012-08-08 14:50:43

3

這絕對有可能。假設你想這是由服務器觸發,你只需向他們發送這個頭:

Location: http://www.foo.com/path/to/file 

哪裏foo.com是您的域和它所包含的文件路徑。這會將用戶轉到您的文件鏈接,並使其自動下載。現在

,來解決在您的瀏覽器中查看內容的問題,需要用服務器端代碼發出Content頭信息像這樣(使用PHP爲例):

<?php 
    header("Content-Type: application/octet-stream"); 
    header("Content-Length: " . filesize($file)); 
    header('Content-Disposition: attachment; filename=' . $file); 
    readfile($file); 
?> 

希望這個作品僞代碼足以讓你開始。祝你好運!

+0

不一定 - 如果他們在瀏覽器中,並且將它們鏈接到圖片(或其他類似的資源) ,它只會讓瀏覽器查看圖片。 – 2012-08-08 14:50:11

+0

答覆已更新。 – 2012-08-08 14:52:26

0

既然您知道您必須提示用戶,請嘗試使用帶有type="application/octet-stream"的普通超鏈接。您可以在標題中使用:"content-disposition: attachment"

相關問題