我有一个 Java Applet 应用程序。用例如下:
用户调用映射到 Servlet 的 URL。 servlet 作为响应返回一个 JSP 页面,用户可以在该页面中在 UI 中导航。整个 UI 由 Swing [基本上是一个 JApplet] 组成。 UI 中的事件以传统方式处理 [ActionListener
s、SelectionListener
s...]。现在我有以下需求:
服务器目录中有一个文件,我应该允许用户通过我的应用程序下载该文件。我需要在用户界面中为用户提供一个链接,单击该链接将触发下载。
考虑到 JApplet 的安全特性可以做到这一点吗?还要考虑Swing组件的事件处理机制。
最佳答案
沙盒小程序的选项。
有 2(.2) 条路可走(我可以立即想到)。
- 使用AppletContext.showDocument(URL,String)使用浏览器触发下载的方法。
- 对于基于“下一代”插件 2 的小程序(Sun/Oracle JVM 中的 1.6.0_10+),可以 Hook JNLP 的功能。 API Java Web Start 。
- JNLP API 提供了在沙盒应用程序或小程序中访问本地文件系统的能力。这是我的小demo. of the JNLP API file services .
- JNLP API 还提供 BasicService.showDocument(URL)方法。此版本稍微优于 AppletContext 等效版本,因为它返回一个
boolean
来指示成功/失败。基于小程序的版本可能会失败,如果失败,它也会默默地执行。另请参阅demo. of the BasicService .
受信任的小程序可以使用此过程。
- 弹出
JFileChooser
以允许用户决定将文件
保存到何处。 - 如果选择器返回有效的
文件
(表明操作未取消),则继续保存。 - 从
URL
获取InputStream
。 - 为
文件
建立一个OutputStream
。 - 从
InputStream
读取字节,并将它们写入OutputStream
。 - 冲洗并重复直到读取结果为-1。
关于java - 从Applet下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5988417/