.Net中使用FTP传送文件

最近在CSDN上发现有些朋友询问在.Net中使用FTP传送文件的问题,以前自己也曾遇到同样的困扰,后来找了个FTP组件并改进了一下,所需功能都实现了:

在需要用FTP上传的场合(如多台WebServerLoadBalance,一台FileServer+磁盘陈列存放文件),.Net本身自带的HttpPostedFile类已无法处理,因为你无法预知用户的访问请求被定向到哪个WebServer上,如果还用内置的处理方式,则文件会被保存在其中一台WebServer上,当用户请求下载文件时,就可能会发生找不到文件的情况。

解决方案:在文件服务器上运行FTP服务,文件上传采用FTP方式传到FileServer上,下载时通过文件服务器的Http服务或通过WebServer上映射的虚拟目录进行。这样就可做到与WebServer的无关性。

具体做法:

1、  下载Ftp支持库http://files.cnblogs.com/liubr/FtpSupport.rar,解压到bin目录

2、  Project中添加引用FtpSupport.dll

3、  代码中Imports/using FtpSupport
ASPX
文件中:

             

< form  id ="Form1"  method ="post"  encType ="multipart/form-data"  runat ="server" >

                     
< INPUT  id ="fileUp"  type ="file"  runat ="server" >  

                     
< asp:Button  id ="Button1"  runat ="server"  Text ="Button" ></ asp:Button >

</ form >

       以上代码不用解释了吧

       后台代码中(VB)

      

Imports  FtpSupport
       ……
Dim  FileSplit()  As   String   =   Split (fileUp.PostedFile.FileName,  " / " )
Dim  FileName  As   String   =  FileSplit(FileSplit.Length  -   1 )
Dim  FtpServer  As   String   =  ConfigurationSettings.AppSettings( " ftpServer " )
Dim  userID  As   String   =  ConfigurationSettings.AppSettings( " userID " )
Dim  passWord  As   String   =  ConfigurationSettings.AppSettings( " password " )
Dim  directory  As   String   =  ConfigurationSettings.AppSettings( " directory " )
Dim  ftp  As   New  FtpConnection(FtpServer, userID, passWord)  ‘创建FTP链接
Dim  stream  As  Stream
stream 
=  fileUp.PostedFile.InputStream               ‘ 取得上传的文件流
ftp.SetCurrentDirectory(directory)                            ‘ 转到需上传的FTP目录
ftp.PutStream(stream, FileName)                           ‘ 将文件传到FTP服务器
stream.Close()
ftp.Close()


FtpSupport类的详细说明没写,根据提示可以很容易理解。包括判断文件、目录是否存在,创建、删除FTP目录,以流方式上传文件,直接传送硬盘上的文件(Ftp.Put(源文件, 目标文件),注意在WebForm中因程序运行在WebServer,此时源文件实际上是WebServer上的文件,因此需先用HttpPostedFile上传到WebServer)
在WebForm及WinForm中均可使用。

 

上传文件大小默认为4M,可修改web.config:
<httpRuntime maxRequestLength="10000" executionTimeout="3600" />
maxRequestLength单位为kb,默认为4096,以上配置为10M,个人试过最大可以设为10000000(不会有人传这么大吧?服务器内存配置再高也装不下)
executionTimeout单位为秒

 

 

@chen nan:
你可以根据自己的设置用command方式连接ftp试试,ftp.SetCurrentDirectory(directory)相当于ftp命令的cd directory,如:
c:/>ftp server
(输入用户名及口令)
ftp>cd directory
如果以上命令能成功应该不会有问题,要保证目录存在,否则应该用ftp.createDirectory()创建目录,库中有检测目录是否存在的函数。我的MSN最近无法发送消息,如还有问题,请QQ联系:623129。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值