我编写了一个Java Web应用程序,它将文件从服务器复制到客户端的计算机上。用户应该能够通过单击在客户端打开该文件。在我的java代码中,我使用:
Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+ FilePath);
FilePath具有客户端的IP地址。此命令打开文件,但问题是文件在服务器端而不是客户端打开。有谁知道我该怎么做?
谢谢,
答案 0 :(得分:2)
Web服务器无法访问客户端的计算机。想象一下,当您访问他们的网站时,谷歌(或任何其他网站)是否可以在您的计算机上启动程序!
也就是说,如果你需要实现它,你将不得不使用一些签名的浏览器扩展。
多年前,我使用签名的Java小程序做过类似的事情。
基本上,您创建一个Java Applet,使用证书对其进行签名并从客户端请求某些权限。客户端用户允许(或拒绝)权限,然后启动该过程。
以下是一些古老的资源:
如果授予权限,可以访问客户端计算机的其他技术包括Microsoft的ActiveX和Adobe的Flash / Flex / Air,但是我没有这些技术的经验,我可以分享。
答案 1 :(得分:2)
Java Web应用程序的代码在服务器计算机上运行,生成HTML / CSS / JS并将其发送到在客户端计算机上运行的webbrowser。 Java代码不在客户端计算机上运行,更不用说直接访问客户端环境了。
如果要在客户端计算机上执行Java代码,则需要在签名(!)小程序中执行,然后将其嵌入到您的网页中,然后将其下载到客户端计算机并在那里执行。然后你就可以使用Desktop#open()
而不是那个丑陋且特定于平台的rundll调用,它不适用于Linux / Mac客户端。
Desktop.getDesktop().open(new File("/path/to/foo.txt")); // Opens notepad on Windows.
答案 2 :(得分:1)
如果您提供的代码片段是servlet的一部分,那么它将在服务器上执行。
在客户端打开文件的一种方法是生成客户端单击的超链接,然后由Web应用程序接收该超链接,并导致文件以正确的MIME类型流回客户端浏览器。 http标题。
可以向用户呈现文件打开对话框并要求选择用于打开文件的应用程序,但只要应用程序安装在客户端上,则MIME类型应该将正确的应用程序作为默认值呈现。