利用ASP.NET设计FTP文件上传[转帖]
软件设计中的重要步骤及具体解决办法

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

  首先要感谢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 =Namespace=" System.IO " %> 

<html > 

<BODY > 

<s cript LANGUAGE = "VB" RUNAT = "SERVER" > 

 Sub UploadFile_Clicked()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 

</s cript > 

<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开发出功能更强大,生命力更大的软件。