利用ASP.NET设计FTP文件上传

来源:互联网 发布:数据库阻塞update 编辑:程序博客网 时间:2024/05/21 08:05

注:转贴自http://bbs.tech.ccidnet.com/

如果要用ASP来作一个FTP文件上传的页面,我想很多人立刻就会想到要用第三方开发的组件,利用第三方的组件,虽然开发起来相对比较容易。  
但一般来说,免费下载的第三方的组件都有某些方面的功能限制,若要购买正版的第三方组件,对于国内的用户,花销也是一个不小的数字,就是能够承担的起,烦杂的手续也使很多人望而却步。虽然微软公司在本身的视窗系统里面也提供了一个可以用来上传文件的组件--Posting   Acceptor。但用过这个组件的朋友们都有一种普遍的感觉,就是实在不好用。

  现在好了,自从微软公司推出了.Net   FrameWork以后,作为.Net   FrameWork中重要组成部分的ASP.NET已经在内部建立了文件上传的功能,并且这种功能既是免费的,用起来又相当好用。下面我们就通过一个例子来介绍如何利用ASP.NET的这种功能完成文件上传。

  一.   软件编写及的运行环境

  微软公司视窗2000专业版和.Net   FrameWork   SDK   BETA2(微软公司开发,用以.Net开发的软件开发包测试2版本)   。   如果运行的服务器的硬盘分区是NTSF分区,就请把服务器上的所有硬盘的存取属性设定为Everyone   ,   这样可确保上传文件可以正确写入服务器的硬盘中。

  二.   软件的基本功能

  本软件主要完成上传本地的文件到服务器的指定目录的功能。就是在软件的运行界面中,在用户选择完要上传的文件名称,填入要上传到服务器的目录名称后,如果没有填入上传到服务器目录,则使用缺省目录 "   C:/   "   ,如果填入的目录在服务器上不存在,就建立此目录。在按 "   开始上传   "按钮后,软件就把选择的文件上传到指定的目录中,然后返回上传文件的信息,即文件的名称,文件的大小及文件的类型。软件具体的操作界面及运行结果界面如下图1所示:
软件的操作界面
图1链接:http://www.pcdog.com/ArtImage/20061013/iz869_1.jpg

软件的运行结果界面
图2链接:http://www.pcdog.com/ArtImage/20061013/iz869_2.jpg


  三.   软件设计中的重要步骤及具体解决办法

  <一>.选择本地要上传到服务器的文件

  首先要感谢ASP.NET的强大功能,他提供的HTML控制元件,使得我们很容易的通过一个对话框来选择要上传的文件。当然你的浏览器也必须是IE   3.02   或者Netscape   3.0版本或者比这二者版本高的浏览器。通过下列语句就可以完成选择本地一个文件的工作:

  <input   id   =   "   loFile   "   type   =   "   file   "   runat   =   "   server   "   >  

  <二>.为了成功完成文件上传工作,在Form中的编码必须用 "   multipart/form-data   "   ,   而不用From的缺省编码 "   application/x-www-form-urlencoded   "。具体代码如下:

  <form   method   =   "   post   "   enctype   = "   multipart/form-data   "   runat   =   "   server   ">
  </form   >  

  <三>.获得上传的文件名称及对磁盘的若干操作

  为了获得上传的文件名称,必须要引入一个名称空间(   NameSapce   )   --System.IO。此名称空间里面定义了许多关于文件及磁盘操作的类,在本软件中就是通过这些类的某些方法和属性来完成软件中的一些功能。

  (1).   获得上传文件的名称

  使用Path类中的GetFileName方法,具体如下:
lstrFileName   =   loFile.PostedFile.FileName  
   '   注:   loFile.PostedFile.FileName   返回的是通过文件对话框选择的文件名,
  这之中包含了文件的目录信息
lstrFileName   =   Path.GetFileName   (   lstrFileName   )
   '   去掉目录信息,返回文件名称  

  (2).   判断上传目录是否存在,不存在就建立

  建立目录要使用到Directory类中的   CreateDirectory   方法,判断目录是否存在要用到   Directory   类中的Exists方法。具体如下:

If   (   not   Directory.Exists(   lstrFileFolder   )   )   Then  
 Directory.CreateDirectory   (   lstrFileFolder   )  
End   If  
  '   注:lstrFileFolder是用户填入的目录名称,或者是缺省的目录名称  

  <四>.上传选定文件到服务器上

  在前面工作都已经完成以后,就可以上传文件了,上传文件相对比较简单,就用下面2行语句就可以完成上传工作。

lstrFileNamePath   =   lstrFileFolder   &   lstrFileName  
  '   得到上传目录及文件名称  
loFile.PostedFile.SaveAs   (   lstrFileNamePath   )  
  '上传文件到服务器  

  <五>.获得并显示上传文件的属性

FileName.Text   =   lstrFileName
  '   获得文件名称
FileType.Text   =   loFile.PostedFile.ContentType  
  '获得文件类型
FileLength.Text   =   cStr   (   loFile.PostedFile.ContentLength   )  
  '获得文件长度
FileUploadForm.visible   =   false  
AnswerMsg.visible   =   true
  '显示上传文件属性  

  以上就是本软件在编写时的一些比较重要的地方。

四.   程序源代码:

<%   @   Import   Namespace= "   System.IO   "   %>
<html   >
<BODY   >
<SCRIPT   LANGUAGE   =   "VB "   RUNAT   =   "SERVER "   >  
 Sub   UploadFile_Clicked   (   Sender   as   Object,   e   as   EventArgs   )  
  Dim   lstrFileName   as   string  
  Dim   lstrFileNamePath   as   string  
  Dim   lstrFileFolder   as   string  
   '   如果上传目录为空,就使用 "   c:/   "作为缺省上传目录  
   '   获得上传到服务器的目录名称
  if   dir.value   <>   " "   then  
   lstrFileFolder   =   dir.value  
  else  
   lstrFileFolder   =   "c:/ "  
  end   if  

   '   获得文件名称  
  lstrFileName   =   loFile.PostedFile.FileName
    '   注:   loFile.PostedFile.FileName   返回的是
   通过文件对话框选择的文件名,这之中包含了文件的目录信息
  lstrFileName   =   Path.GetFileName   (   lstrFileName   )  
    '   去掉目录信息,返回文件名称

   '   判断上传目录是否存在,不存在就建立  
  If   (   not   Directory.Exists   (   lstrFileFolder   )   )   Then  
   Directory.CreateDirectory   (   lstrFileFolder   )  
  End   If  

    '上传文件到服务器  
  lstrFileNamePath   =   lstrFileFolder   &   lstrFileName  
    '   得到上传目录及文件名称  
  loFile.PostedFile.SaveAs   (   lstrFileNamePath   )  

    '   获得并显示上传文件的属性  
  FileName.Text   =   lstrFileName
    '   获得文件名称
  FileType.Text   =   loFile.PostedFile.ContentType  
    '   获得文件类型
  FileLength.Text   =   cStr   (   loFile.PostedFile.ContentLength   )  
    '   获得文件长度
  FileUploadForm.visible   =   false  
  AnswerMsg.visible   =   true
    '   显示上传文件属性
  End   sub  
</SCRIPT   >
<ASP:panel   id   =   "FileUploadForm "   visible   =   "   true   "   runat   =   "server "   >  
<form   method   =   "post "   enctype   =   "multipart/form-data "   runat   =   "server "   >
 <h1   >   欢迎使用ASP.NET页面实现文件上传   </h1   >
  请选择上传到服务器的文件名称:  
 <input   id   =   "loFile "   type   =   "file "   runat   =   "server "   >   <br   >
  请输入上传到服务器的目录名称:  
 <input   id   =   "dir "   type   =   "text "   runat   =   "server "   >   <br   >
 <input   type   =   "submit "   value   =   "开始上传 "   OnServerClick   =   "    
     UploadFile_Clicked "   runat   =   "server "   >
 <br   >
</form   >
</ASP:panel   >

<ASP:panel   id   =   "AnswerMsg "   visible   =   "   false   "   runat   =   "server "   >
 谢谢使用ASP.NET页面实现文件上传   <br   >
 成功上传   <ASP:label   id   =   "FileName "   runat   =   "server "   />   <br   >  
 文件大小   <ASP:label   id   =   "FileLength "   runat   =   "server "   />   字节   <br   >    文件类型   <ASP:label   id   =   "FileType   "   runat   =   "server "   />   <br   >  
</ASP:panel   >
</BODY   >
</HTML   >  

  五.   总结

  至此我们就完成了一个比较完善的FTP文件上传软件的全部工作,由此可见ASP.NET的功能还是比较强大的。通过本例子,我们也看到要想灵活运用ASP.NET,还要深入掌握微软公司为.NET   FRAMEWORK开发的软件开发包(SDK   BETA   2),只有掌握了.NET   FRAMEWORK开发的软件开发包,才可能用ASP.NET开发出功能更强大,生命力更大的软件。