asp.net中操作ftp的方法
2007-04-11 15:49
363 查看
作者:LoveCherry 转贴自:http://www.cnblogs.com/lovecherry 点击数:479
的时候我们上传东西不想传到web目录而是ftp服务器,这样可以不占用服务器宝贵空间,以前发过一个tips中提到利用ftpsupport.dll操作ftp的方法,可能当时没有说清楚,网友要求给个清楚的例子,就随便写了个文件可以上传,下载,删除ftp上的文件: 首先,dll 点击 这里 下载,别忘记给项目添加引用 test.aspx: <%@ Page language=c# Codebehind=Test.aspx.cs AutoEventWireup=false Inherits=FtpTest.Test %> <!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN > <HTML> <HEAD> <title>Test</title> <meta name=GENERATOR Content=Microsoft Visual Studio .NET 7.1> <meta name=CODE_LANGUAGE Content=C#> <meta name=vs_defaultClientScript content=javascript> <meta name=vs_targetSchema content=http://schemas.microsoft.com/intellisense/ie5> </HEAD> <body> <form id=Form1 method=post runat=server> <input type=file id=file1 runat=server> <asp:TextBox id=tb_Dir runat=server Width=80px>/</asp:TextBox> <asp:Button id=btn_upload runat=server Text=Upload></asp:Button> <asp:DataGrid id=DataGrid1 runat=server AutoGenerateColumns=False CellPadding=3 DataKeyField=AutoID> <ItemStyle Font-Size=9pt Font-Names=Verdana></ItemStyle> <HeaderStyle Font-Size=9pt Font-Names=Verdana Font-Bold=True></HeaderStyle> <Columns> <asp:BoundColumn DataField=FileName HeaderText=FileName></asp:BoundColumn> <asp:BoundColumn DataField=FilePath HeaderText=FilePath></asp:BoundColumn> <asp:BoundColumn DataField=FileDownloadName HeaderText=FileDownloadName></asp:BoundColumn> <asp:BoundColumn DataField=FileSize HeaderText=FileSize(K)></asp:BoundColumn> <asp:BoundColumn DataField=UploadTime HeaderText=UploadTime></asp:BoundColumn> <asp:ButtonColumn Text=DOWNLOAD HeaderText=Download CommandName=Download></asp:ButtonColumn> <asp:ButtonColumn Text=DEL HeaderText=Del CommandName=Del></asp:ButtonColumn> </Columns> </asp:DataGrid> </form> </body> </HTML> test.aspx.cs: using System; using System.Collections; using System.Configuration; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace FtpTest { /// <summary> /// Test 的摘要说明。 /// </summary> public class Test : System.Web.UI.Page { protected System.Web.UI.WebControls.Button btn_upload; protected System.Web.UI.HtmlControls.HtmlInputFile file1; protected System.Web.UI.WebControls.TextBox tb_Dir; protected System.Web.UI.WebControls.DataGrid DataGrid1; private void Page_Load(object sender, System.EventArgs e) { if(!IsPostBack) { SetBind(); } } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.btn_upload.Click += new System.EventHandler(this.btn_upload_Click); this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void SetBind() { SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings[strconn]); SqlDataAdapter da=new SqlDataAdapter(select * from FTP order by FilePath,conn); DataSet ds=new DataSet(); da.Fill(ds); this.DataGrid1.DataSource=ds; this.DataGrid1.DataBind(); } private void btn_upload_Click(object sender, System.EventArgs e) { FtpClass ftp=new FtpClass(); string filedownloadname=ftp.FtpUpload(this.file1.PostedFile,this.tb_Dir.Text); string [] arrs=file1.PostedFile.FileName.Split('//'); string filename=arrs[arrs.Length-1]; SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings[strconn]); SqlCommand comm=new SqlCommand(insert into FTP (FileName,FileDownloadName,FilePath,FileSize,UploadTime) values (@filename,@filedownloadname,@filepath,@filesize,@uploadtime),conn); SqlParameter parm1=new SqlParameter(@filename,SqlDbType.NVarChar,50); parm1.Value=filename; SqlParameter parm2=new SqlParameter(@filedownloadname,SqlDbType.NVarChar,50); parm2.Value=filedownloadname; SqlParameter parm3=new SqlParameter(@filepath,SqlDbType.NVarChar,50); parm3.Value=this.tb_Dir.Text; SqlParameter parm4=new SqlParameter(@filesize,SqlDbType.Int); parm4.Value=this.file1.PostedFile.ContentLength/1024; SqlParameter parm5=new SqlParameter(@uploadtime,SqlDbType.DateTime); parm5.Value=DateTime.Now.ToString(); comm.Parameters.Add(parm1); comm.Parameters.Add(parm2); comm.Parameters.Add(parm3); comm.Parameters.Add(parm4); comm.Parameters.Add(parm5); conn.Open(); comm.ExecuteNonQuery(); conn.Close(); SetBind(); } private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { if(e.CommandName==Del) { FtpClass ftp=new FtpClass(); ftp.FileDel(e.Item.Cells[2].Text,e.Item.Cells[1].Text); SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings[strconn]); SqlCommand comm=new SqlCommand(delete from FTP where AutoID=@autoid,conn); SqlParameter parm1=new SqlParameter(@autoid,SqlDbType.NVarChar,50); parm1.Value=this.DataGrid1.DataKeys[e.Item.ItemIndex]; comm.Parameters.Add(parm1); conn.Open(); comm.ExecuteNonQuery(); conn.Close(); SetBind(); } if(e.CommandName==Download) { FtpClass ftp=new FtpClass(); ftp.FtpDownload(HttpContext.Current,e.Item.Cells[2].Text,e.Item.Cells[1].Text); } } } } FtpClass.cs: using System; using System.Configuration; using System.IO; using FtpSupport; using Microsoft.Win32; using System.Web; namespace FtpTest { public class FtpClass { private string FtpIP=ConfigurationSettings.AppSettings[FtpIP]; private string FtpUserName=ConfigurationSettings.AppSettings[FtpUserName]; private string FtpPassord=ConfigurationSettings.AppSettings[FtpPassWord]; private FtpConnection ftp; private FtpConnection FtpConn() { ftp=new FtpConnection(); ftp.Connect(this.FtpIP,this.FtpUserName,this.FtpPassord); return ftp; } private string GetFileExtName(string filename,bool withdot) { string [] arrs=filename.Split('.'); int i=arrs.Length; return withdot?.+arrs[i-1].ToString():arrs[i-1].ToString(); } private string GetFileContentType(string filedownloadname) { string DEFAULT_CONTENT_TYPE = application/unknown; RegistryKey regkey,fileextkey; string FileContentType; try { regkey=Registry.ClassesRoot; fileextkey=regkey.OpenSubKey(this.GetFileExtName(filedownloadname,false)); FileContentType=fileextkey.GetValue(Content Type,DEFAULT_CONTENT_TYPE).ToString(); } catch { FileContentType=DEFAULT_CONTENT_TYPE; } return FileContentType; } public string FtpUpload(HttpPostedFile file,string dir) { string FileDownloadName=DateTime.Now.ToString(yyyyMMddhhmmss)+this.GetFileExtName(file.FileName,true); FtpConnection ftp=this.FtpConn(); if(ftp.DirectoryExist(dir)) ftp.SetCurrentDirectory(dir); else { ftp.CreateDirectory(dir); ftp.SetCurrentDirectory(dir); } ftp.PutStream(file.InputStream,FileDownloadName); ftp.Close(); return FileDownloadName; } public void FileDel(string filedownloadname,string dir) { FtpConnection ftp=this.FtpConn(); if(ftp.DirectoryExist(dir)) { ftp.SetCurrentDirectory(dir); if(ftp.FileExist(filedownloadname)) { ftp.DeleteFile(filedownloadname); } } ftp.Close(); } public void FtpDownload(HttpContext context,string filedownloadname,string dir) { context.Response.Clear(); context.Response.AddHeader(Content-Disposition, attachment; filename=+filedownloadname); context.Response.ContentType=this.GetFileContentType(filedownloadname); FtpConnection ftp=this.FtpConn(); ftp.SetCurrentDirectory(dir); if(ftp.FileExist(filedownloadname)) { FtpStream ftpfs=ftp.OpenFile(filedownloadname,GenericRights.Read); byte [] buffer=new byte[10240]; int n=ftpfs.Read(buffer,0,buffer.Length); while(n>0) { context.Response.BinaryWrite(buffer); n=ftpfs.Read(buffer,0,buffer.Length); } Response.End(); ftpfs.Close(); } else { context.Response.Write(<script>alert('file does not exist!');</script>); } ftp.Close(); } } } 这个dll在获取ftp文件列表方便存在些问题,等我修改下会放出一个改进版本,所以暂时用数据库保存ftp文件列表先将就下: 数据库: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FTP]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[FTP] GO CREATE TABLE [dbo].[FTP] ( [AutoID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL , [FileName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [FilePath] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [FileDownloadName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [FileSize] [int] NULL , [UploadTime] [datetime] NULL ) ON [PRIMARY] GO |
相关文章推荐
- asp.net中操作ftp的方法
- [导入]asp.net中操作ftp的方法
- asp.net中操作ftp的方法
- asp.net中操作ftp的方法
- Asp.Net操作FTP方法
- Asp.Net操作FTP方法
- asp.net操作xml数据常用方法小结
- ASP.NET操作各类时间段获取方法汇总
- Asp.net MVC防止图片盗链的实现方法,通过自定义RouteHandler来操作
- asp.net操作GridView添删改查的两种方法 及 光棒效果
- Asp.Net操作Word内容“System.Runtime.InteropServices.COMException: 命令失败”的解决方法
- [导入]最近用到的觉得比较不错的几个tips-(1)asp。net操作ftp,上传和下载 (2) 长时间提交,在提交后禁止页面按钮 (3) 方便的javascript日历
- Asp.Net Repeater中使用Button控件并响应单击操作的方法
- Asp.net(C#)对文件操作的方法(读取,删除,批量拷贝,删除...)
- Asp.Net Repeater中使用Button控件并响应单击操作的方法
- C#中Bitmap类实现对图像操作的一些方法(Asp.net(C#)-放大缩小图片尺寸)
- Asp.Net 文本框按回车键响应按钮单击操作的方法
- Asp.net操作Excel(终极方法NPOI)
- asp.net 在IIS下操作Excel文件权限不足的解决方法
- asp.net操作SQL数据库的三种读取方法..