如何从我的Web服务器编辑用户文件系统上的文件?

时间:2010-05-17 14:12:14

标签: java windows linux macos

我正在寻找实施建议,因为我进入了一个我不熟悉的新领域。

在最简单的层面上,我想找到一种可以从我的Web服务器读取/写入用户计算机的方法。为了实现这一点,我想我必须在用户机器上安装某种“插件”,它可以接收(或轮询?)服务器以获取指令。

以上是我目前的思路,也许是使用JAVA来做到这一点。这需要适用于Linux,Mac和Windows操作系统。

我真的在寻找上面的建议,这是个好主意吗?有没有更好的方法呢?有没有我可以建立的东西?

我非常感谢所有的意见和建议,因为这是我以前没有做过的事情。

全部谢谢

6 个答案:

答案 0 :(得分:4)

对于Java,您可以通过Java Web Start启动客户端应用程序,该应用程序将能够对文件系统执行一组有限的操作。

如果限制太多,则需要提供下载客户端应用程序的链接,该应用程序将在用户的桌面计算机上安装/执行。

答案 1 :(得分:2)

我假设你想在用户的机器上读取和写入通常不可访问的特定文件(即不是临时文件或沙盒中的文件)。你想从你的网络服务器上做到这一点。

当你在寻找跨平台时,我会选择java。鉴于您的需求很简单(从远程命令读取/写入文件),您可能可能会定位JRE 1.4,现在已有很多年了,但安装在ca. 98%的桌面(source)。

以下是您如何处理此问题的概述:

  • 创建一个java applet或Java Web Start应用程序,用于从URL中获取命令列表。 URL可以包含标识计算机所需的任何特定标识,例如用户标识(请参阅下面的替代标识。)
  • 您的网络服务器会生成applet应执行的命令列表 - 创建文件,读取文件,写入文件并将其作为响应发送。
  • 对小程序/应用程序进行签名,以便它可以逃脱沙箱的限制。为此,您需要获取证书。稍后会详细介绍。
  • 告知用户有关小程序正在执行的操作的信息。例如。您网站上的一个页面,说明为什么要求他们信任您的证书以及其含义。

您可以将其实现为applet或应用程序,大部分工作都是相同的。我谈到applet,但请记住它同样适用于应用程序。

更详细: applet从URL请求命令列表。为了阻止在另一个恶意站点上使用applet的尝试,您应该使用HTTPS来获取命令列表,以便对服务器进行身份验证。应将URL硬编码到您的applet中,以便任何更改此操作的尝试都将破坏签名。如何通过URL将命令传递给applet取决于您,例如您可以使用XML或使用RMI,只需将命令列表作为对象发送。

我提到使用userid来识别机器 - 使用机器的MAC地址也是可能的。请参阅how to get the mac address of the host

获得命令列表后,applet将使用java文件I / O apis执行这些命令。请参阅javadocs中的File,FileReader / FileWriter。您包含适当的日志记录,以便稍后可以在必要时审核applet操作。一旦applet执行了命令,它就会将命令的结果作为POST操作或其他RMI方法调用发送回服务器,如果你选择了RMI。

如果要继续从服务器发送命令,则applet可以定期轮询URL /调用RMI方法。 Timer可以帮助解决这个问题。

由于存在通信错误,客户端必须多次请求命令列表。因此,每次从服务器生成命令列表时,都会获得一个id。服务器给出具有相同id的相同列表,直到它从applet收到命令已执行的确认。

要对小程序进行签名,您应该从证书颁发机构获取rsa证书。您可以自签名,但随后您正在打开通往其他人的大门,修改您的应用并冒充您的证书。有关获取和使用证书的详细信息,请here

如果您不了解java,那么所有这些都可能没有多大意义,并且开始时并不是一个简单的项目,特别是考虑到如果您的实现存在漏洞和缺陷会对您的用户产生影响。

谨慎行事可能是明智之举:尽管你可以做到这一点,但并不一定意味着你应该这样做。我想大多数专家用户都不会对这个应用程序的使用感到不满,也不会接受证书。然后有责任 - 如果您的应用程序通过错误,错误配置,人为错误等意外删除了关键文件,您将如何为此做好准备?

答案 2 :(得分:0)

对于用户来说,Web浏览器插件可能是最简单的,因为用户不必管理另一个正在运行的应用程序,但它有其局限性,例如必须为每个浏览器开发一个插件。此外,用户需要运行浏览器。

您可以让用户安装他们必须继续运行的桌面应用程序,因此将其作为服务安装可能是理想的。

您还可以使用插件作为Web浏览器和桌面应用程序之间的楔子,这就是Flash的工作方式。

答案 3 :(得分:0)

要知道你必须回答“为什么”这个问题,你为什么要这样做呢。

如果您只是想在用户的计算机上存储一些您需要在本地使用的状态,那么对于小型事物您可以使用cookie,或者对于更大的需求,您可以使用HTML5中的新Web数据库功能{{3 }}

如果您需要访问特定文件,那么您实际上将不得不规避Java在网页上运行时所执行的安全沙箱。我会留下让其他人进去,我不知道如何自己动手做。

答案 4 :(得分:0)

在我看来,Applet将是一个更好的解决方案。我创建了一个applet,它将zip文件从客户端机器上的服务器下载到temp文件夹中,将zip文件解压缩到客户端(浏览器用户)指定的目录中,然后删除zip文件。

感谢。

答案 5 :(得分:0)

最低端的成果可能是通过您的Web服务器向一组给定文件提供WebDAV访问,因为这允许用户使用他们常用的工具将文件视为其常用文件系统的一部分。然后,您不必执行所有这些功能。

看起来Slide可以在Tomcat上部署,而JBoss有ModeShape。

这有用吗?