我正在开发一个允许多文件下载的Silverlight控件。目前,我正试图让我的思路围绕浏览器的权限模型。
假设在网页上,用户在文本框中输入本地文件夹(c:\ temp)。然后用户单击一个按钮。
是否可以在JavaScript或Silverlight中将一组文件(存储在服务器上)写入用户驱动器上的该文件夹?
答案 0 :(得分:12)
来自Javascript - 没有。如果可能的话,从你的PC上安装病毒就可能太容易了。
Silverlight我不知道,但我会假设写给用户的硬盘驱动器将非常有限且严格控制。
答案 1 :(得分:5)
仅当浏览器具有可以利用的安全漏洞时。
由于您所描述的功能允许任何网页对访问者的系统做任何不好的事情,因此在这个时代,任何人都无法故意实现对本地磁盘的任意访问。
您可以做的第二件事是让用户下载ZIP存档并告诉他在任何他喜欢的地方解压缩。
答案 2 :(得分:5)
你不能从Silverlight。您唯一可以访问的是隔离存储。
http://blog.paranoidferret.com/index.php/2007/10/12/silverlight-tutorial-using-isolated-storage/
答案 3 :(得分:5)
警告:大多数答案都不正确。
您可以在MSIE(使用ActiveX FileSystemObject)和Firefox(使用nsIFileOutputStream)中通过Javascript写入文件。在这两种情况下,将向用户呈现安全对话,其可以允许或拒绝读取或写入。
答案 4 :(得分:4)
我已经使用Scripting.FileSystemObject来执行此操作。仅适用于IE,并且只能使用非常轻松和不安全的安全设置,但它可能适用于企业中的Intranet站点,至少它适用于我。
答案 5 :(得分:2)
Google Gears有一种方法可以进行客户端存储。
那就是说,我怀疑它会做你正在尝试的事情。我认为你最好先让服务器端下载文件并将它们放入客户端的.zip文件中,然后再传递给它们。
答案 6 :(得分:1)
如前所述,这必须通过服务器端完成,Silverlight和JavaScript都是沙箱来禁用这种类型的安全漏洞。我建议将文件打包到服务器上的zip存档中,然后下载zip存档。
答案 7 :(得分:1)
您可以通过ActiveX控件或Java小程序执行此操作。无论哪种方式,您都必须使用代码签名证书对项目进行签名。您可以使用自签名证书,但警告对话框会更响亮更亮。
然后,您可以使用Javascript调用已签名的控件并保存文件。在创建这样的applet时要非常小心。您不希望允许任何其他网站使用此控件,因此控件必须实现以下某些功能:
您可以在某个地方找到可以使用Javascript控制的控件或小程序。
答案 8 :(得分:0)
我不相信这是可能的,因为它会造成无数的安全问题。我认为这是安全的唯一方法是混合用户权限和某种方式验证(在客户端)网站的真实性以及他们想要下载到我的计算机的文件。
你可以做的一种方法是触发“FileSaveDialog”,但我认为这不是你想要的。也许首先打包文件集然后触发是实现目标的方法。 Silverlight仅允许每个域1mb的隔离存储空间,绝对不会让站点访问客户端硬盘驱动器。
答案 9 :(得分:0)
这并没有直接回答这个问题,但Adobe Flex 4允许使用FileReference类进行此操作。
答案 10 :(得分:0)
Silverlight 4 OOB允许访问用户的文档目录。