Silverlight获取选择文件的本地物理路径

最近在做一个大文件断点续传的控件,有试过纯C#的代码来写,但后来发现是在是太不灵活了,于是考虑使用控件。但在控件开发过程中发现,如何获取上传文件的物理路径是个大问题,因为Silverlight不支持获取客户端路径的,不仅是Silverlight,所有的微软上传控件都不支持获取本地物理路径。于是我就各种查,终于发现有种方法可以获取到文件的信息了。

先看一个例子

 1 #region    选择文件
 2 private void bt_SelectFile_Click(object sender, RoutedEventArgs e)
 3 {
 4     OpenFileDialog ofd = new OpenFileDialog();    //初始化
 5     ofd.Multiselect = true;     //设置可以多选
 6     ofd.Filter="请选择文件|‘*’";    //限制文件类型及提示
 7     if (ofd.ShowDialog() == true)
 8     {
 9         foreach (FileInfo file in ofd.Files)
10         {
11              UserFile userFile = new UserFile();    //自定义的文件上传信息类
12              userFile.FileName = file.Name;         //获取文件名
13              userFile.FileStream = file.OpenRead();   //以只读的方式打开文件
14              userFile.FilePhysicalpath = file.FullName;  //在由受信任的应用程序调用时,获取目录或文件的完全路径名
15              userFile.FileTime = file.LastWriteTime;    //在由受信任的应用程序调用时,获取文件的最后修改日期
16         }
17     }
18 }
19 #endregion

选择文件

事实上,在我们调试的时候会发现,userFile.FilePhysicalpath = file.FullName; userFile.FileTime = file.LastWriteTime; 这两句代码会报错,提示说发现未经调试的异常。这是因为Silverlight在由微软的封装下不允许访问客户端的文件,怎么解决呢?其实很简单,在最新发布的Silverlight5的版本中,微软允许开发者在内部通过提升应用程序的信任度来获取本地文件操作的权限。

右击我们的Silverlight项目的属性,在Silverlight一栏下,我们可以看到

勾选【在浏览器内运行时需要提升的信任】,这样我们就可以操作本地文件啦!

这里需要说明一下在勾选了之后微软做的操作,因为有的时候我们勾选了还是不能获取文件的路径。

当你勾选“在浏览器内运行时需要提升的信任”时,visual studio会做下面几件事情:

1、在silverlight的项目文件(.csproj)中增加内容:<RequireInBrowserElevation>true</RequireInBrowserElevation>

2、在项目的Properties文件夹中增加一个文件:InBrowserSettings.xml。

3、在silverlight的项目文件(.csproj)中增加内容:<InBrowserSettingsFile>Properties/InBrowserSettings.xml</InBrowserSettingsFile>

详细情况请看我的另一篇文章Silverlight控件——如何提升应用程序信任度与问题解决

现在我们就可以在调试的时候获取到文件的路径啦。

好了,我们把项目发出到服务器上面去看看吧,咦?怎么还是获取不到呢?原来这是因为调试的时候是在本地,而发不到服务器上之后,是通过互联网访问的,也就是说,这是一个跨域的行为。聪明的你肯定想到了,对了,我们在编写一个可以跨域访问的脚本就行了撒。其实很简单,看下面

在我们的web项目下建立一个clientaccesspolicy.xml,代码如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <access-policy>
 3   <cross-domain-access>
 4     <policy>
 5       <allow-from http-request-headers="*">
 6         <domain uri="*"/>
 7       </allow-from>
 8       <grant-to>
 9         <resource path="/" include-subpaths="true"/>
10       </grant-to>
11     </policy>
12   </cross-domain-access>
13 </access-policy>

clientaccesspolicy.xml

将 clientaccesspolicy.xml 文件保存到承载该服务的域的根目录中。例如,如果该服务在 http://fabrikam.com 上承载,则文件必须位于 http://fabrikam.com/clientaccesspolicy.xml。

另外再建立一个crossdomain.xml,代码如下:

1 <?xml version="1.0"?>
2 <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
3 <cross-domain-policy>
4   <allow-http-request-headers-from domain="*" headers="*"/>
5 </cross-domain-policy>

crossdomain.xml

将 crossdomain.xml 文件保存在承载服务的域的根目录中。例如,如果该服务在 http://fabrikam.com 上承载,则文件必须位于 http://fabrikam.com/crossdomain.xml。

详情请看使服务跨域边界可用

现在我们就可以在其他电脑打开网站输入网址,获取到我们本地文件的路径了。

Silverlight获取选择文件的本地物理路径

时间: 2024-08-05 11:20:06

Silverlight获取选择文件的本地物理路径的相关文章

input file 样式以及获取选择文件方法集合

样式一(http://www.cnblogs.com/jason-liu-blogs/archive/2013/06/13/3133377.html) <style> a{display:inline-block; width:100px; height:40px; background:red; position:relative; overflow:hidden;} a:hover{background:green;} input{position:absolute; right:0; t

获取pe文件调试符号文件pdb路径

一般如果编译器设置了调试符号文件,则编译后的PE文件中调试字段会包含该路径,在一般的溯源分析中我们可能会注意到: 使用工具:pestudio 如下图,将文件加载进工具后,查看debug字段,可以发现pdb路径.注意:该路径不一定存在... 原文地址:http://blog.51cto.com/antivirusjo/2105150

MySQL 递归获取某文件夹的全路径

传递参数:文件夹ID 1 DROP FUNCTION IF EXISTS RecursionFolderFullPath; 2 3 CREATE FUNCTION RecursionFolderFullPath(folderId INT(11)) 4 RETURNS VARCHAR(1000) 5 BEGIN 6 declare fullPath VARCHAR(1000) default ''; 7 declare parentId INT(11) default '0'; 8 9 selec

python获取当前文件所在的绝对路径

import os basedir = os.path.abspath(os.path.dirname(__file__)) print(basedir) 原文地址:https://www.cnblogs.com/songyanxin/p/11063771.html

物理路径,虚拟路径,物理路径与虚拟路径转换,文件下载方法

1 什么是物理路径?什么是虚拟路径?(1) 例子:  用IIS举个例子:     WEB服务目录是d:\路径     那么用HTTP访问网站根目录的时候,其实访问的是d:\路径,那么其中虚拟路径就是\(根),物理路径就是d:\路径  (2) 我自己的理解:绝对路径一般都是带有磁盘完成路径, 而虚拟路径一般不带有磁盘 2 程序中虚拟路径和物理路径的转化 #region 物理路径和相对路径的转换        //本地路径转换成URL相对路径          private string urlc

C# ,asp.net 获取当前,相对,绝对路径

一.C#获取当前路径的方法: 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName -获取模块的完整路径. 2. System.Environment.CurrentDirectory -获取和设置当前目录(该进程从中启动的目录)的完全限定目录. 3. System.IO.Directory.GetCurrentDirectory() -获取应用程序的当前工作目录.这个不一定是程序从中启动的目录啊,有可能程序放

xshell本地上传文件到Ubuntu上及从Ubuntu上下载文件到本地

1.第一种方法是最常用的 :如果下载了Xshell和Xftp,Ctrl+Alt+F就可以选择文件的互传了!(虚拟机/云服务器通用)--只要相互间能ping得通. 2.第二种方法 :ubuntu环境下安装lrzsz,具体命令是--->      sudo apt-get install lrzsz      (如果是root权限就不用加sudo) 安装完毕后,具体操作命令是:   sz [file] --->可将服务器的文件下载到本地, (1)比如要把ubuntu上的urls.txt下载到本地,

[MFC]选择目录对话框和选择文件对话框 [转]

在MFC编程中经常会需要用到选择目录和选择文件的界面,以下总结一下本人常用的这两种对话框的生成方法: 选择目录对话框 {    char szPath[MAX_PATH];     //存放选择的目录路径     CString str;    ZeroMemory(szPath, sizeof(szPath));       BROWSEINFO bi;       bi.hwndOwner = m_hWnd;       bi.pidlRoot = NULL;       bi.pszDis

input type=file 选择文件路径获取方法

input file上传按钮选择文件后的value是无法直接获取到的,本文借用js方法获取file选中文件的物理路径和文件名 代码如下: DOM结构: <input type="text" id="textfield" /><br/> <a class="a-upload"> <input type="file" name="file" id="fileF