天行者

分享 学习 交流
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

在.Net中使用FTP(08.12.19新增源代码)

Posted on 2005-02-03 10:49  天行者  阅读(8473)  评论(31编辑  收藏  举报
 

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

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

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

具体做法:

1、  下载Ftp支持库https://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目录,以流方式上传文件,直接传送硬盘上的文件(http://www.cnblogs.com/liubr/admin/ftp://ftp.put(源文件/, 目标文件),注意在WebForm中因程序运行在WebServer,此时源文件实际上是WebServer上的文件,因此需先用HttpPostedFile上传到WebServer)
在WebForm及WinForm中均可使用。

 

2008.12.19:PS:源代码,无偿奉送。