【发布时间】:2009-01-05 16:49:45
【问题描述】:
我正在开发一个允许多文件下载的 Silverlight 控件。目前,我正在努力思考浏览器的权限模型。
假设在网页上,用户在文本框中输入本地文件夹 (c:\temp)。然后用户点击一个按钮。
是否可以在 JavaScript 或 Silverlight 中将一组文件(存储在服务器上)写入用户驱动器上的该文件夹?
【问题讨论】:
标签: javascript silverlight browser
我正在开发一个允许多文件下载的 Silverlight 控件。目前,我正在努力思考浏览器的权限模型。
假设在网页上,用户在文本框中输入本地文件夹 (c:\temp)。然后用户点击一个按钮。
是否可以在 JavaScript 或 Silverlight 中将一组文件(存储在服务器上)写入用户驱动器上的该文件夹?
【问题讨论】:
标签: javascript silverlight browser
来自 Javascript - 没有。如果可能的话,一些人渣在你的电脑上安装病毒太容易了。
Silverlight 我不知道,但我认为写入用户硬盘驱动器会非常有限且受到严格控制。
【讨论】:
仅当浏览器存在您可以利用的安全漏洞时。
由于您描述的功能将允许任何网页为访问者的系统做任何该死的事情,因此在当今时代,任何人都不会故意对本地磁盘进行任意访问。
您可以做的下一个最好的事情是让用户下载一个 ZIP 存档并告诉他在任何他喜欢的地方解压缩。
【讨论】:
【讨论】:
警告:这些答案大多不正确。
您可以在 MSIE(使用 ActiveX FileSystemObject)和 Firefox(使用 nsIFileOutputStream)中通过 Javascript 写入文件。在这两种情况下,用户都会看到一个安全对话,可以允许或拒绝读取或写入。
【讨论】:
我已使用 Scripting.FileSystemObject 来执行此操作。只能在 IE 中使用,并且只能在非常宽松和不安全的安全设置下使用,但它可能适用于企业的 Intranet 站点,至少它对我有用。
【讨论】:
Google Gears 有一种方法来进行客户端存储。
也就是说,我怀疑它会做你正在尝试的事情。我认为您最好让服务器端的东西下载文件并将它们放入客户端的 .zip 文件中,然后再将其传递给它们。
【讨论】:
正如之前回答的那样,这必须通过服务器端完成,Silverlight 和 JavaScript 被沙盒化以禁用这种类型的安全漏洞。我建议将文件打包到服务器上的 zip 存档中,然后下载 zip 存档。
【讨论】:
您可以通过 ActiveX 控件或 Java 小程序执行此操作。无论采用哪种方式,项目都必须使用代码签名证书进行签名。您可以使用自签名证书,但警告对话框会更响亮。
然后您可以使用 Javascript 调用已签名的控件并保存文件。在创建这样的小程序时要非常小心。您不想让任何其他网站使用此控件,因此该控件必须实现以下某些功能:
您可能会在某个地方找到可以用 Javascript 控制的控件或小程序。
【讨论】:
我不相信这是可能的,因为它会产生无数的安全问题。我认为这是安全的唯一方法是混合用户权限和某种方式(在客户端)验证网站的真实性以及他们想要下载到我的计算机的文件。
您可以做的一种方法是触发“FileSaveDialog”,但我认为这不是您想要的。也许先打包文件集合然后触发是实现目标的方法。 Silverlight 仅允许每个域 1mb 的隔离存储,并且绝对不会让网站访问客户端硬盘。
【讨论】:
这并不能直接回答问题,但 Adobe Flex 4 允许使用 FileReference 类进行此操作。
【讨论】:
Silverlight 4 OOB 允许访问用户的文档目录。
【讨论】: