从网页访问服务器上的文件

时间:2012-08-03 16:35:19

标签: file tomcat hosting

我正在开发一个显示pdf文件的网页,该文件需要通过(JSF)文件上传进行更新。我的问题是,我如何设置我的网页,以便这个新上传的文件实际取代旧的?

我有文件上传工作,以便管理员用户可以上传不同的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"的方式,但我不知道我对<Context>标签一无所知,也无法让它发挥作用

2 个答案:

答案 0 :(得分:0)

不确定这是否可行,但我已经使用JQuery和Ajax完成了异步上传脚本,该脚本在页面上运行时更新图像。 可能也适用于您的方案。

基本原则:使用JQuery和Blueimp上传库创建上传脚本:http://blueimp.github.com/jQuery-File-Upload/

将上传指向servlet,JSP页面或处理上载的页面。此页面将存储文件以及所需的文件,然后将带有JSON或XML数据的回调提供回发送上载的页面,包括存储文件的文件名。然后使用JQuery在JSF页面上更新对象的内容。

请注意,每个上传文件名都应该更改;否则,浏览器可能会尝试从缓存中获取旧的PDF文件,并且没有任何更改。在我写这篇文章时,我无法弄清楚如何解决这个问题,所以你可能需要对它进行更多的研究。

为了您的方便,我还写了一篇关于它的blog post,可能对您有帮助。

答案 1 :(得分:0)

我认为您遇到的问题是浏览器正在缓存PDF文件,即使服务器上有新文件,浏览器也不会提取它。为了强制浏览器获取最新版本的PDF文件,您需要将HTTP响应中的过期标头设置为很短的时间。有关在Tomcat中进行此设置的更多信息,请参见here。我相信这是自Tomcat 7以来唯一可用的功能。对于以前版本的Tomcat,您需要自己编辑修改响应标头的Servlet,您可以通过一些谷歌搜索轻松找到它。

要查看实际的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>