2012-08-03 61 views
3

我正在處理顯示需要通過(JSF)文件上傳更新的pdf文件的網頁。我的問題是,我怎樣才能設置我的網頁,以便這個新上傳的文件實際上取代了舊文件?從網頁訪問服務器上的文件

我有文件上傳工作,以便管理員用戶可以上傳不同的pdf文件來替換當前顯示的文件,將pdf發送到我的tomcat服務器中的文件夾,使用與先前顯示的文件名相同的文件名。我這樣做是因爲我知道您不能將PDF保存到Web應用程序中的資源文件,因爲這些文件在應用程序運行時不會被動態加載。我使用以下HTML來顯示PDF格式:

<object id="pdf" data="uploads/folder/replaceable.pdf" type="application/pdf" width="100%" height="100%"> 
     <p>It appears you don't have a PDF plugin for this browser. 
     No biggie... you can <a hRef="uploads/folder/replaceable.pdf" onClick="updatePDF();">click here to 
     download the PDF file.</a></p> 
</object> 

我見過Uploaded image only available after refreshing the pageHow I save and retrieve an image on my server in a java webapp看到,這可以用<Context>標籤來檢索文件來完成類似我怎麼也data="uploads/folder/replaceable.pdf",但我不」 t知道關於<Context>標記的任何內容,並且一直沒有能夠得到這個工作

+0

你可以發佈一些關於你如何上傳文件? – 2012-08-27 20:56:25

回答

0

我認爲你遇到的問題是瀏覽器正在緩存PDF文件,並且即使服務器上有新文件,瀏覽器也不會提取它。爲了強制瀏覽器獲取最新版本的PDF文件,您需要在非常短的時間內將HTTP響應中的過期標頭設置。有關在Tomcat中設置的更多信息,請參閱here。我相信這是Tomcat 7以來的一項功能。對於以前版本的Tomcat,您需要推出自己的Servlet,修改響應標頭,您可以通過一些Google搜索輕鬆找到它。

要查看實際的HTTP響應標題,您可以使用內置於Chrome或Firefox中的Firebug的開發者工具。

這裏的web.xml中的相關條目,你將需要:

<!-- EXPIRES FILTER --> 
<filter> 
    <filter-name>ExpiresFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class> 
    <init-param> 
     <param-name>ExpiresByType application/pdf</param-name> 
     <param-value>access plus 1 minutes</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>ExpiresFilter</filter-name> 
    <url-pattern>uploads/folder/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 
0

不知道這是否會工作,但我做了一個異步上傳腳本使用JQuery和Ajax,更新圖像上的運行頁。這可能也適用於您的方案。

的基本原理是:創建jQuery和Blueimp上傳庫上載腳本:http://blueimp.github.com/jQuery-File-Upload/

點上傳到一個Servlet,JSP頁面或者這樣處理上載。此頁面將存儲該文件以及需要的內容,然後提供帶有JSON或XML數據的回調回到發送上傳的頁面,其中包括存儲文件的文件名。然後使用JQuery在JSF頁面上更新對象的內容。

請注意,每次上傳文件名都應該改變;否則,瀏覽器可能會嘗試從緩存中獲取舊的PDF文件,並且沒有任何更改。在寫這篇文章時,我無法弄清楚如何解決這個問題,因此您可能需要對此進行更多的研究。

爲了您的方便,我還寫了一個關於它的blog post,可能對您有所幫助。