Silverlight 4:从本地系统读取文件而不是OOB?

时间:2011-07-20 17:27:50

标签: silverlight file privileges

如何在Silverlight 4中动态地从本地系统读取文件的任何提示/技巧,而不必离开浏览器?

模拟?以编程方式切换app提升信任开/关? 或者,如果不离开浏览器,这根本不可能做到吗?

目前我有一个Pegasus ImageGear PDF查看器,我将“LoadDocument”方法提供给PDF文件流。 如果文件是应用程序资源并使用应用程序编译,这当然可以正常工作。

StreamResourceInfo resource = Application.GetResourceStream(new Uri("/TestRIA;component/SampleData/test.pdf", UriKind.Relative));
docViewer.LoadDocument(resource.Stream);

此silverlight应用程序将通过部署在服务器上的网站进行托管。此服务器具有专门用于文件存储库的分区。 “D:”分区中的这些文件当前由ASPX Web应用程序访问并显示在PDF查看器中。我们正在转向Silverlight,因此当用户在存储库中选择该文件的网格行表示时,我知道该文件的“NAME”。存储库的位置是在另一个应用程序中配置的数据库中保存的字符串。我只是将文件名连接到该存储库路径并拥有文件路径。

同样,第三方查看器的“LoadDocument”方法有两个重载。一个接受PDF流,一个接受PDF文件名。

例如,我有一个click事件,它提供了文档的名称,我已经有了将其连接到的根路径:

void testButton_Click(object sender, EventArgs e)
{
    string docName = myListBox.SelectedItem.Content.ToString();
    docViewer.LoadDocument(repositoryPath + docName);

    //OR using stream

    Stream s = new FileStream(repositoryPath + docName, FileMode.Open);
    docViewer.LoadDocument(s);
}

3 个答案:

答案 0 :(得分:2)

您无法以编程方式与SL4中的任意文件进行交互。 期间的。你可以读取和写入文件的隔离存储部分,但这不是你想要的。您可以通过文件打开对话框读取和写入文件,但我认为这不是您想要的。

Silverlight沙箱的唯一出路网络。您必须与非沙盒服务进行通信才能执行此操作。 SL可以支持Web服务,Http甚至套接字。这对你来说似乎是可行的,因为你在谈论文件在“服务器”上的某个地方。

答案 1 :(得分:1)

我记得只有当代码是通过用户操作(例如按钮点击)启动时,这才能在没有提升信任的情况下工作。

http://msdn.microsoft.com/en-us/library/ff382752%28v=vs.95%29.aspx

  

出于安全考虑,如果Silverlight应用程序是沙盒   应用程序,文件和打印对话框必须由用户启动。这个   意味着您必须从用户启动的操作中显示它们,例如   单击按钮的事件处理程序。

作为一种可能的解决方法,如果您的Silverlight应用程序由服务支持,您可以使该服务处理文件的读/写,假设它可以访问目标中的位置和足够的权限文件夹(或多个)。

答案 2 :(得分:0)

创建一个OpenFileDialog框,您可以将流返回到选定的文件。