2013-12-20 281 views
0

說我在數據庫中存儲pdf文件(不重要)。應用程序的用戶定期訪問一個頁面以獲取存儲的PDF並打印出來 - 用於粘貼標籤。瀏覽器緩存可下載文件

因爲他們每次需要打印標籤時都會下載PDF,所以我覺得他們的下載目錄隨着時間​​的推移填滿了同一個文檔的重複內容。

有沒有辦法指導瀏覽器緩存這個文件?或者可能有相關鏈接到用戶文件系統的任何方法?所有用戶將使用Windows 7 Pro在Chrome/Firefox上。

+0

你唯一的選擇是HTTP緩存相關的頭,充其量他們的建議,即要下載的材料應緩存的瀏覽器。您的網站不能強制客戶端執行任何操作,也不能使用任何用戶端本地數據。這種能力會使竊取用戶文件系統中的任意文件變得微不足道。你可以看看HTML5 localstorage,但是你會生成pdf客戶端 –

+0

我使用Content-Disposition:附件; ...順便說一句。 –

+0

不要這些瀏覽器只是打開.pdf文件,而不是下載它?上次我檢查他們做了! – cmorrissey

回答

0

我發現我的問題一個有用的解決方案。

從對我的問題的評論中,我們得出結論:最好使用瀏覽器內置的PDF/DOC渲染器並下載其他任何未被識別的內容。爲了在必要時利用瀏覽器

Content-Disposition: inline; filename=something.pdf 

而是附着的,我使用「內聯」:

我讀這個標準:http://tools.ietf.org/html/rfc6266

這是溶液(報頭)。

-1

大多數瀏覽器會根據URL自動執行此操作。如果特定PDF blob的URL不變,瀏覽器將不會重新下載它,除非服務器響應它已更改(通過HTTP字段)。

因此,您應該爲您的網站設計每個資源的「永久鏈接」。這可以通過在URL字符串中使用某種資源ID來實現。

正如其他的評論說,服務器不能保證客戶端執行什麼特別;你所能提供的所有建議都是你希望大多數瀏覽器都會同樣對待的。

+0

我正在使用沒有查詢字符串的典型GET鏈接。它仍然擊中服務器。無論如何,我並不擔心服務器受到攻擊。我很可能會在客戶端的計算機上建立下載。 –

0

Etags會幫助你做到這一點。如果自上次客戶端下載以來文件未更新,則服務器將發送304「未修改」響應,而不是文件。

如果您的文件是動態生成的,您將需要在PHP中手動實現etag生成,而不是依賴於Web服務器。

http://www.php.net/manual/en/function.http-cache-etag.php

+0

這將工作與內容處置:附件;頭? –

+0

我想知道下載欄是否仍然會出現在您的下載文件夾中已存在的文件中。在提供Etag –

+0

的情況下,我不是100%確定,但基本上這是如何通過AWS S3指南實現的:http://blogs.aws.amazon.com/php/post/Tx2C4WJBMSMW68A/Streaming-Amazon- S3-對象 - 從-A-Web服務器 – rbaker86