基于ASP.NET与XML的网络硬盘开发(2)

来源:互联网 发布:淘宝卖家发错货我不退 编辑:程序博客网 时间:2024/05/22 00:30

 2、创建文件夹及设置访问权限
  
     在当前路径下输入新文件夹名称来创建新文件夹,通过调用.net的IO名字空间中的类库 Directory方法来实现该操作:Directory.CreateDirectory(string directory),字符串directory表示新建文件夹的完整路径,该方法默认向所有用户开放新文件夹的完全读写访问权限。对于网络硬盘共享根文 件夹可手动进行创建,并设置写入权限,通过执行"internet信息服务"的"权限向导"来设置访问权限,可以设置密码来指定是否允许用户进入该文件夹 以及是否允许用户删除该文件夹。此外,为了管理这些文件夹,需要保留相关设置信息:如文件夹名、位置、受限操作类型、密码及创建者等。将这些信息写入 XML文件,随后通过读写该XML文件来实现对文件夹的相关操作。
  
   Public void CreateXmlOrAddFrag (string xmlFullPath, string folderFullPath, string owner, string password, int type){
    XmlDocument xmlDoc=new XmlDocument();
    string xml="";
    String xmlNode="<character>";
    XmlNode+="<full Path>";
    XmlNode+=folderFullPath;
    XmlNode+="</full Path>";
    XmlNode+="<owner>";
    XmlNode+=owner;
    XmlNode+="</owner>";
    xmlNode+="<password>";
    xmlNode+=password;
    xmlNode+="</password>";
    xmlNode+="<type>";
    xmlNode+=type;
    xmlNode+="</type>";
    xmlNode+="</character>";
    if(!File.Exists(xmlFullPath)){//若不存在则创建xml存储文件
     xml="<?xml version=’1.0’ encoding=’gb2312’?>";
     xml+="<folder>";
     xml+=xmlNode;
     xml+="</folder>";
     xmlDoc.LoadXml(xml);
     xmlDoc.Save(xmlFullPath);//存储文件
    }
    else{//存在xml存储文件则添加新的文档片段
     xmlDoc.Load(xmlFullPath);
     XmlDocumentFragment docFrag=xmlDoc.CreateDocumentFragment();//文档片元素节点
     docFrag.InnerXml=xmlNode;
     XmlNode currNode=xmlDoc.DocumentElement;//获取文档根节点
     currNode.InsertBefore(docFrag,currNode.FirstChild);//插入文档片段
     xmlDoc.Save(xmlFullPath);//存储改变内容
    }
   }
  
     其中,参数fileFullPath是存储文件夹信息的XML文件路径,folderFullPath是此新文件夹路径,owner是创建者名, password是密码,type表示限制操作的类型("0"表示进入受限,"1"表示删除受限)。程序首先判断存储文件夹信息的文件是否存在,不存在则 动态创建文件,之后新建文件夹时,只需添加文档片段即可。这里,对XML文件的读写通过文档对象模型DOM实现,由于此处XML文件不会很大,因此对内存 资源要求不会太高,速度会很快。
  
     3、对文件及文件夹的操作
  
     对文件的操作包括"下载"和"删除"两种,用下面的语句实现下载功能:
  
   dr[2]="<a href="+url+" target=_blank"+">下载</a>";//建立联接地址
  
     其中,url是指定文件对应的服务器路径。 通过这样的链接将文件定位到服务器上的对应位置,客户端可以下载文件到本机上,也可在服务器上打开它。
  
     删除文件则利用.NET的IO命名空间的File类库中的方法实现:File. Delete(string filename);其中,filename为文件的完整路径。
   如果文件夹在创建时被设置为"进入受限"或者"删除受限",用户在执行这样的操作时将被要求密码验证,只有通过验证才能完成相应的操作。. NET的Directory类库提供的方法Delete()只能删除空文件夹,因此需要先清空文件夹中的内容,然后才能完成此操作。由于文件夹中可能还包 含有文件夹,这里通过递归调用实现该操作:
  
   Public void Delete Folder (string dir)
   {
    For each (string d in Directory.GetFileSystemEntries (dir))
    {
     If (File. Exists (d))
      File. Delete(d);//直接删除其中的文件
     Else
      Delete Folder(d);//递归删除子文件夹
    }
    Directory. Delete(dir);//删除已空文件夹
   }
  
     其中,参数dir是待删除文件夹的完整路径。程序使用循环语句,查找文件夹中的内容,若是文件则直接删除,若是文件夹,则递归调用方法自身来删除子文件夹,文件夹清空后再完成删除操作。
  
     4、文件上传
  
     .NET提供的类库HttpPostedFile和HttpFilesCollection可以访问上传到服务器的文件,并且可以控制文件上传过程。 HttpPostedFile类封装已上传到服务器的文件对象,其方法和属性提供对每个文件内容和属性的访问;HttpFilesCollection类 为多个HttpPostedFile对象提供一个容器,保存上传给服务器的数据结构的类,利用被传送的文件集合的Files属性从HttpRequest 对象加以访问。
  
     1)客户端表单的编码类型Enctype 设置为multipart/form-data的MIME格式,提交表单使用HTTP的post方法:
  
   <Form id="form1" method="post" enctype="multipart/form-data/form-data" runat="server" >
  
     2)HttpInputFile控件运行在服务器端,设置方法如下:
  
   <INPUT id="file Up" type="file" size="6" runat="server">
  
     3)如果要上传多个文件,可设置多个HttpInputFile控件,然后利用HttpRequest.Files来分别获取这些文件。
  
     5、跟踪"当前路径"值
  
     由于需要在不同的文件夹之间跳转,而所有文件夹的内容都通过同一个页面Default.ASPx来显示,当传送查询字符串调用它时,可以设置一个静态 变量实现路径的完整表示:public static string currFullPath=""。当前路径发生改变时,将路径值传送给这个静态变量,该变量始终存储当前路径值,用它作为查询字符串调用显示页: currFullPath=Request["path"]。因此,利用Response. Redirect ("Default.aspx? path="+currFullPath) 语句总能显示当前文件夹下的内容。
  
     6、环境配置文件Web.config的处理
  
     在中文状态下,需要将全球化设置编码由默认的"Utf-8"改为"gb2312":
  
   <Globalization
   Request Encoding="gb2312"
   Response Encoding="gb2312"
   />
  
     同时,考虑到Web.config默认设置的文件大小可能不能满足实际需要,通过修改参数maxRequestLength的值,可将其尺度适当放大一些:
  
   <HttpRuntime maxRequestLength="500000">
   </httpRuntime>
  
     结束语
  
     ASP.NET技术与XML技术是当前网络开发应用的热点,在数据传输、信息发布、电子支付及网络安全等诸多领域被广泛应用。这里将相关技术结合起来 开发网络硬盘,实现系统资源共享,不仅可以满足用户的基本需求、操作简便,而且可有效保护用户私有数据不被非法访问,具有一定安全性,便于维护,因此在文 件传输系统、网上考试系统以及新闻发布系统等实际应用中,均可广泛采用这种处理模式。

原创粉丝点击