如何在Silverlight中本地保存多个文件?

时间:2011-04-25 16:43:26

标签: c# silverlight silverlight-4.0 local-storage

我的问题是我有一个LOB应用程序,它可以根据用户输入保存多个文件(仅在运行时已知的文件数)。将此保存为单个文件并让用户将它们分开,或者将它们作为单个文件压缩不幸是不可能的。

SaveFileDialog似乎一次只能保存1个文件。第三方控制可能是一种选择,但我还没有找到任何用于此目的的控件。谢谢!

2 个答案:

答案 0 :(得分:8)

浏览器安全模型指南(Silverlight之外)禁止Web应用程序逻辑(脚本或其他)直接访问本地文件系统。

如果Web应用程序脚本可以将任意文件写入本地硬盘上的任意位置,请考虑恶意网站可能对您的计算机造成的破坏!

出于这个原因,Silverlight将您的代码与本地文件系统隔离开来。 Silverlight管理“打开文件”或“保存文件”对话框,但出于安全原因,您的Web应用程序代码永远不会直接查看文件名的完整路径。 Silverlight对话框一次只支持使用一个文件名/路径。

Silverlight确实在本地计算机上提供了隔离存储,您的Web应用程序可以在其中写入多个文件。但是,如评论中所述,隔离存储在两个方向上是隔离的 - 它使Web应用程序与本地文件系统隔离,这使得最终用户难以访问浏览器外部的隔离存储的内容。 (很难让非技术用户无法做到这一点,但不足以将孤立存储称为“安全”来防止恶意窥探)。

如果没有编写您自己的原生可执行浏览器扩展(对于您希望支持的每个不同的浏览器品牌和版本)(或某些浏览器的非沙盒javascript插件),我认为Web应用程序没有办法将数据推送到多个本地文件中,方便在一个用户操作中在浏览器外使用。

答案 1 :(得分:3)

由于这是Intranet区域中的LOB,您是否考虑过要求用户将应用程序安装为具有Elevated trust的OOB。这将允许您在没有SaveFileDialog的情况下将文件写入用户Documents文件夹。

另一种选择是使用单个SaveFileDialog调用来压缩文件。

没有其他面向Silverlight的解决方案。