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>

我已经看到上传的图像仅在刷新页面后可用,以及我如何在 java webapp 中的服务器上保存和检索图像,并看到这可以使用<Context>标签来完成,以类似于我的方式来检索文件data="uploads/folder/replaceable.pdf",但我没有对标签一无所知,<Context>无法让它工作

4

2 回答 2

0

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

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

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

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

为了您的方便,我还写了一篇关于它的博客文章,可能会对您有所帮助。

于 2012-08-28T08:05:23.647 回答
0

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

要查看实际的 HTTP 响应标头,您可以使用 Chrome 或 Firebug 中内置的开发人员工具和 Firefox。

这是您需要的 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>
于 2012-08-28T11:55:18.650 回答