簡體   English   中英

盡管瀏覽器預取/緩存,如何判斷文件是否真的被下載和保存?

[英]How to tell if a file was really downloaded and saved, despite browser prefetch/cache?

我正在創建一個腳本來保存下載統計信息,但我只想在文件實際下載的情況下更新統計信息。

問題是瀏覽器(例如,Explorer 9、Chrome 等)會在“保存/打開”對話框仍然打開時自動開始下載文件。 這意味着文件可以在用戶指定保存位置之前完全下載(到瀏覽器指定的臨時目錄中)(或者當資源管理器仍然顯示黃色警告欄時)。

即使文件已成功下載,用戶也可以決定取消保存。 如何告訴瀏覽器不要自動開始下載? 一些 HTTP header 也許? 還有其他解決方案嗎?

你不能做你想做的事。 這是不可能的,至少在你問的方式上。

可以做的是在安裝程序中放入一些代碼,以便在服務器運行時訪問您的服務器,然后您的腳本可以跟蹤它。 這通常是這樣做的,但肯定不是萬無一失的。 許多人下載軟件並離線安裝。 (特別是撥號用戶,仍然有成千上萬的用戶。)此外,不能保證安裝程序不會被防火牆軟件或其他東西阻止。

所以這一切都取決於你需要知道什么時候安裝它。 如果它很重要,那么您的安裝程序需要在安裝之前與服務器進行驗證。 當然,這可以被黑客入侵,您對此無能為力。 但是,我懷疑它會為你的目的工作。

另外,不要忘記每次下載要多次安裝。

我不認為你能看到這個。 在將軟件發送給客戶之前,您必須讓某人為該軟件付費。

我建議您讓網站記住購買,因此如果在下載過程中出現問題,用戶可以重試,而無需再次付費(或聯系管理員)。

好吧,有某種中間頁面來確認“是的,我想下載這個”可能主要消除取消的下載。

現在,我不確定這是否完全有可能,但您可以嘗試通過 PHP 提供文件,而不是從 Apache 的典型下載。 在 PHP 中,您可以使用readfile來提供來自 PHP 腳本的文件。 因此,您可以調用 readfile、flush 並確定所服務的字節數。 如果這不等於文件中的字節數,則它被中斷。 我不確定 readfile 是否可以這樣工作,但值得一試。

請注意,這仍然無法解決 Marcel 提到的關於在臨時文件下載完成之前點擊“取消”的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM