【问题标题】:Access file on server from web page从网页访问服务器上的文件
【发布时间】:2012-08-01 17:49:07
【问题描述】:

我正在处理一个显示 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 并看到这可以使用&lt;Context&gt; 标签来检索文件,类似于我拥有data="uploads/folder/replaceable.pdf",但我对@987654326 一无所知@标签,但无法让它工作

【问题讨论】:

  • 你能发布一些关于你是如何上传文件的吗?

标签: file tomcat hosting


【解决方案1】:

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

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

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

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

为了您的方便,我还写了一封blog post 可能对您有所帮助。

【讨论】:

    【解决方案2】:

    我认为您遇到的问题是浏览器正在缓存 PDF 文件,即使服务器上有一个新文件可用,浏览器也没有获取它。为了强制浏览器获取最新版本的 PDF 文件,您需要将 HTTP 响应中的过期标头设置为非常短的时间。有关在 Tomcat 中进行设置的更多信息,请参见 here。我相信这是自 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>
    

    【讨论】:

      猜你喜欢
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 2015-11-04
      相关资源
      最近更新 更多