科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Asp.net Xml开发网络硬盘

Asp.net Xml开发网络硬盘

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

   文件传送常用的三种方式FTP、Email及“网上邻居”都在一定程度上实现了文件数据的交流,但它们都主要面向“点对点”的传送,无法实现“一块空间,资源互见”的应用需求,这种基于“点对多”的共享模式需要寻求另外的传输途径。

作者:中国IT实验室 来源:中国IT实验室 2007年10月3日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

  


  Directory.CreateDirectory(string directory)
  
  其中,字符串directory表示新建文件夹的完整路径,这个方法默认向所有用户开放新文件夹的完全读写访问权限。特殊地,对网络硬盘共享根文件夹(程序中示例为"NetHard"文件夹,你可以更改它)的创建你还可以手动进行,对应地,你需要手动设置以开放此文件夹的写入权限,在IIS下,你可以在"internet信息服务"下,对该文件夹执行"权限向导"来设置访问权限。
  
  资源共享时应该考虑安全性。这里,你可以设置用户对该文件夹的访问权限,通过设置密码,你可以指定是否允许用户进入该文件夹,是否允许删除该文件夹,或者两者都禁止。这样,你可以保护自己的文件,将它们独占访问或者限制在一个特定的范围内(这个范围的成员应该知道你的密码),这样,产品研发部门可以共用一个文件夹,财务部门也通过同样的方式共用另一个文件夹,不属于这个部门的人员将限制访问。当然,这样的限制你也可以应用到单个文件上(这样的应用似乎不多,程序未实现)。
  
  此外,为了管理这些文件夹,你需要保留它们的设置信息:文件夹名、位置、受限操作类型、密码及创建人等。程序中将这些信息写入一Xml文件(此为folder.xml文件),随后对文件夹的各种管理操作均通过读写该xml文件来进行,以下方法就实现了新建文件夹时设置信息的存储:
  
  public void CreateXmlOrAddFrag(string xmlFullPath,string
  folderFullPath,string owner,string password,int type){
  XmlDocument xmlDoc=new XmlDocument();
  string xml="";
  string xmlNode="";
  xmlNode+="";
  xmlNode+=folderFullPath;
  xmlNode+="
";
  xmlNode+="";
  xmlNode+=owner;
  xmlNode+="
";
  xmlNode+="";
  xmlNode+=password;
  xmlNode+="
";
  xmlNode+="";
  xmlNode+=type;
  xmlNode+="
";
  xmlNode+="
";
  if(!File.Exists(xmlFullPath)){//不存在则创建xml存储文件
  xml="";
  xml+="";
  xml+=xmlNode;
  xml+="
";
  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"表示删除受限)。在程序运行之初,存储文件夹信息的folder.xml文件可能尚不存在,所以程序中首先判断这个文件是否存在,不存在则动态创建这个文件,这之后新建文件夹时,将只需要添加文档片段。这里,对Xml文件的读写通过DOM(文档对象模型)来实现,由于此处Xml文件不会太大,这种方式不会对内存资源要求太高,速度也会很快!
  
  3、对文件及文件夹的操作:
  
  对文件的操作包括"下载"和"删除"两种,在上面列表显示指定文件夹中内容时,针对文件,有这样的语句:
  
  dr[2]="下载";//建立联接地址
  
  
  其中,url是指定文件对应的服务器路径。 通过这样的链接将文件定位到服务器上的对应位置。视文件格式的不同,客户端可以下载文件到本机上,也可以就在服务器上打开它。
  
  删除文件很简单,.Net的IO命名空间的File类库有这样的方法:
  
  File.Delete(string filename);其中,filename为文件的完整路径
  
  你需要注意的是,文件的删除将不需要验证,要防止文件被删除,你需要依照下面的方式来进行。(当然,程序中为避免文件误删除提供了确认验证,文件夹删除也一样!)
  
  对文件夹的操作分为:进入或者删除。如果文件夹在创建时被设置"进入受限"或者"删除受限",用户在执行这样的操作时将被要求密码验证,只有通过验证才能完成相应的操作,这种方式保护了你的文件被非法访问或删除。
  
  相对文件的删除,文件夹的删除程序要稍微复杂些,.Net的Directory类库提供的方法Delete()只能删除空文件夹,这就需要我们首先清空文件夹中内容,然后才能完成这一操作,由于文件夹中还可能再包含有文件夹,我们通过递归调用来实现这一操作:
  
  //删除文件夹的方法
  public void DeleteFolder(string dir)
  {
  foreach(string d in Directory.GetFileSystemEntries(dir))
  {
  if(File.Exists(d))
  File.Delete(d);//直接删除其中的文件
  else
  DeleteFolder(d);//递归删除子文件夹
  }
  Directory.Delete(dir);//删除已空文件夹
  }
  
  
  
  其中,参数dir是待删除文件夹的完整路径。程序使用循环语句,查找文件夹中的内容,是文件则直接删除,如果是文件夹,则递归调用方法自身来删除子文件夹,文件夹清空后再完成删除操作。
  
  4、文件上传:
  
  要实现网络硬盘的功能,必须要有可供操作的文件,这些文件来自于客户端的上传(当然,服务器端也能提供这些文件,但这不是网络硬盘的重点),过去我们实现文件的上传,在Asp中通常是使用第一些文件上传组件,比如Microsoft 的PostingAcceptor组件,另外还有第三方提供的一些付费组件(不过说真的,这些组件并不好用)。那时候想要自己开发这样的文件上传组件,相当繁琐;而现在,.Net提供的类库HttpPostedFile和HttpFilesCollection可以很容易地访问上载到服务器的文件,同时使开发人员控制文件上载过程。其中的HttpPostedFile类封装已经上传到服务器的文件对象,其方法和属性提供对每个文件的内容和属性的访问;HttpFileCollection类则为多个HttpPostedFile对象提供一个容器,用作保存上传给服务器的数据结构的类,这样你就可以利用被传送的文件集合,该文件集合可通过其Files属性从HttpRequest 对象访问,一旦服务器接收了请求的整个内容,该集合就可以访问。这些内置的组件使得Asp.net中实现文件上传相当容易,甚至只需要几行代码就可以了!关于Asp.net中实现文件上传的文章很多,这里不做专门的阐述,需要的话你可以参考那些文章,这里,只提示你需要注意以下几点:
  
  1)、客户端表单的编码类型Enctype 设置为multipart/form-data的MIME格式,提交表单使用Http的post方法,象下面这样:
  
  

  runat="server" >
  
  
  
  2)、HttpInputFile控件运行在服务器端,设置runat=server,type=file ,象下面这样:
  
  
  
  
  
  3)、要上传多个文件,你可以布置多个HttpInputFile控件,然后使用HttpRequest.Files来获取这些文件。
  
  5、环境配置文件Web.config的处理:
  
  在中文状态下,你可能需要将全球化设置编码由默认的"Utf-8"改为"gb2312",语句如下:
  
    requestEncoding="gb2312"
  responseEncoding="gb2312"
  />
  
  同时,Web.config默认设置的的文件大小限制可能并不能满足你的需要,你或许需要将限制尺度放大一些。这通过修改参数maxRequestLength的值来实现,如下所示:
  
  
  
  

  
  6、随时跟踪"当前路径"值:
  
  程序中的另一个关键点是关于"当前路径"的,由于你总是需要在不同的文件夹之间跳转:点击"进入"到达下一级文件夹,点击"上一级文件夹"返回前一级文件夹;而所有这些文件夹的内容都通过同一个页面(Default.aspx)来显示,这个显示页面被设置为始终显示当前文件夹下内容。在你传送查询字符串来调用它时,你需要在查询字符串中包含当前路径的完整表示,这在程序中通过设置一个静态变量来实现:public static string currFullPath=""; 当前路径发生改变时,总是将这个路径值传送给这个静态标量:currFullPath=Request["path"];这就使得这个静态变量始终存储着当前的路径值,以这个静态变量为查询字符串调用显示页: Response.Redirect("Default.aspx?path="+currFullPath)就总能显示当前文件夹下的内容了! 
   
  

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件