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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#写的ASP.NET上传到FTP上,文件,文件夹都可以。 首先,选择本地文件或者文件夹,然后点击上传按钮以后,有一个压缩过程,该过程也有一个实时更新的进度条,并可以显示压缩所需的实时更新的剩余时间,压缩完成以后上传,上传也是有一个实时更新的进度条,显示剩余上传所需时间。上传完成以后显示压缩的时间、上传的时间和总共所需的时间。 根据文件流上传,根据文件流进度做的进度条,是真的实实在在的进度条。 代码都有详细的注释,例如: private string ftpUser = "Administrator"; //ftp用户名 private string ftpPassword = "123456"; //ftp密码 public TimeSpan t; //加载进度条总时间 private DateTime startTotalTimeFtp = System.DateTime.Now; private DateTime endTotalTimeFtp = System.DateTime.Now; //压缩用时(为传值做准备) //public TimeSpan zipTime; //定义开始时间、结束时间和之间的时间段,以此来估计完成所需剩余时间 DateTime startTime = System.DateTime.Now; DateTime endTime = System.DateTime.Now; TimeSpan TimeSp; //定义剩余时间 string surPlusTime = string.Empty; //判断是否小于1秒所用 int Ti = 0; //实例化类TimeSpanClass TimeSpanClass timeSpanClass = new TimeSpanClass(); 进度条可以实时动态更新,显示剩余时间,剩余时间也跟随进度条实时动态更新,上传完成显示上传时间。 再次声明,版权所有(花费本人好几个月的心血研究真实的进度条),保证进度条为真正按照文件流的进度所进行,如有问题,可与本人联系!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值