【问题标题】:Open link to file in Vaadin在 Vaadin 中打开文件链接
【发布时间】:2012-09-12 07:57:14
【问题描述】:

我正在尝试使用以下代码在 Vaadin 的新窗口中打开指向文件的链接:

getWindow().open(new ExternalResource("./uploads/file.png"), "_blank");

我将文件存储在 /uploads/ 下的 webapp 文件夹中,托管在 Tomcat 服务器上。但是当我单击触发上述代码的按钮时,会打开一个新窗口,其中包含前一个窗口的内容和指向该文件的 URL,但不会触发文件下载。

如何在新窗口中打开下载链接?

【问题讨论】:

    标签: java tomcat hyperlink vaadin


    【解决方案1】:

    首先,您的意思是“../uploads/file.png”吗? (即 Web 应用程序之外的资源。)

    您使用的是ExternalResource,这基本上意味着您正在浏览器中打开一个URL。 URL“./uploads/file.png”指向应用程序,您会看到相同的窗口。

    相反,您可以使用FileResource 让 Vaadin 应用程序提供文件。在这种情况下,我建议不要使用相对路径,因为它们可能会因部署服务器而异。

    如果您想直接使用 Tomcat 在相同的 Web 应用程序上下文中提供文件,您应该在 web.xml 中定义“./uploads”所做的 not 映射回您的应用程序。

    确保这一点的最简单方法是将 Vaadin 应用程序放在“/application/*”(或类似)路径下。如果中间没有 FileResource,这是更有效的方法。缺点是应用程序 URI 发生了变化,并且对用户可见。

    【讨论】:

    • 理想情况下,我想在相同的 Web 应用程序上下文中提供来自 {application name}/WebContent 文件夹的图像。 FileResource 似乎适用于具有绝对路径的文件(例如在本地文件系统上),但我将如何链接到 WebContent 文件夹中的文件?
    • 其实……在tomcat webapp文件夹中存储动态文件可能是一个非常愚蠢的想法。绝对文件路径可能只是这里最好的解决方案。
    • 只要应用程序本身的上下文映射不重叠,WebContent 文件夹就可以正常工作。我使用了单独的 /application/* 和 /resources/* 映射以及简单的 index.html,它将用户重定向到真正的 /application/ URI(只是为了避免用户输入较短的 URL)。
    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2015-12-25
    • 2018-08-12
    • 1970-01-01
    • 2012-09-25
    • 2019-07-01
    • 2012-09-25
    相关资源
    最近更新 更多