我正在尝试使用以下代码在 Vaadin 的新窗口中打开指向文件的链接:
getWindow().open(new ExternalResource("./uploads/file.png"), "_blank");
我将文件存储在 /uploads/ 下的 webapp 文件夹中,托管在 Tomcat 服务器上。但是当我单击触发上述代码的按钮时,会打开一个新窗口,其中包含前一个窗口的内容和指向该文件的 URL,但不会触发文件下载。
如何在新窗口中打开下载链接?
首先,您的意思是“../uploads/file.png”吗?(即 Web 应用程序之外的资源。)
您正在使用ExternalResource,这基本上意味着您正在浏览器中打开一个 URL。URL“./uploads/file.png”指向应用程序,您会看到相同的窗口。
相反,您可以使用FileResource让 Vaadin 应用程序提供文件。在这种情况下,我建议不要使用相对路径,因为它们可能因部署服务器而异。
如果您想在相同的 Web 应用程序上下文中直接使用 Tomcat提供文件,您应该在 web.xml 中定义“./uploads”不会映射回您的应用程序。
确保这一点的最简单方法是将 Vaadin 应用程序放在“/application/*”(或类似)路径下。如果中间没有 FileResource,这是更有效的方法。缺点是应用程序 URI 发生了变化,并且对用户可见。