[转]asp.net (网页中操作FTP)
C#2.0中增加了对FTP操作的支持。
在网上搜到了www.knowsky.com/343881.html,这篇文章对于ftp操作做了简单的介绍。
我根据这个介绍,将其转化到网页中来,从而完成我们现在项目的需求。
在这个项目中,我使用了三种方法:List ,upload还是download。
后台代码:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Net;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
string ftpServerIP = "59.125.163.103";
string ftpUserID = "vtek";
string ftpPassword = "vtek_admin";
protected void Page_Load(object sender, EventArgs e)
{

}

private void Upload(string filename)
{
FileInfo fileInf = new FileInfo(filename);
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
FtpWebRequest reqFTP;

// 根据uri创建FtpWebRequest对象
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));

// ftp用户名和密码
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

// 默认为true,连接不会被关闭
// 在一个命令之后被执行
reqFTP.KeepAlive = false;

// 指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

// 指定数据传输类型
reqFTP.UseBinary = true;

// 上传文件时通知服务器文件的大小
reqFTP.ContentLength = fileInf.Length;

// 缓冲大小设置为2kb
int buffLength = 2048;

byte[] buff = new byte[buffLength];
int contentLen;

// 打开一个文件流 (System.IO.FileStream) 去读上传的文件
FileStream fs = fileInf.OpenRead();
try
{
// 把上传的文件写入流
Stream strm = reqFTP.GetRequestStream();

// 每次读文件流的2kb
contentLen = fs.Read(buff, 0, buffLength);

// 流内容没有结束
while (contentLen != 0)
{
// 把内容从file stream 写入 upload stream
strm.Write(buff, 0, contentLen);

contentLen = fs.Read(buff, 0, buffLength);
}

// 关闭两个流
strm.Close();
fs.Close();
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message, "Upload Error");
Response.Write(ex.Message);
}
}
private void Download(string filePath, string fileName)
{

FtpWebRequest reqFTP;

try
{

//filePath = <<The full path where the file is to be created. the>>,

//fileName = <<Name of the file to be createdNeed not name on FTP server. name name()>>

FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName));

reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;

reqFTP.UseBinary = true;

reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

Stream ftpStream = response.GetResponseStream();

long cl = response.ContentLength;

int bufferSize = 2048;

int readCount;

byte[] buffer = new byte[bufferSize];


readCount = ftpStream.Read(buffer, 0, bufferSize);

while (readCount > 0)
{

outputStream.Write(buffer, 0, readCount);

readCount = ftpStream.Read(buffer, 0, bufferSize);

}


ftpStream.Close();

outputStream.Close();

response.Close();

}

catch (Exception ex)
{

Response.Write(ex.Message);

}




}


public string[] GetFileList()
{
string[] downloadFiles = new string[100];
StringBuilder result = new StringBuilder();
FtpWebRequest reqFTP;
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/"));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
WebResponse response = reqFTP.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("\n");
line = reader.ReadLine();
}
// to remove the trailing '\n'
result.Remove(result.ToString().LastIndexOf('\n'), 1);
reader.Close();
response.Close();
return result.ToString().Split('\n');
}
catch (Exception ex)
{
Response.Write(ex.Message);
downloadFiles = null;
return downloadFiles;
}
}




protected void Button1_Click(object sender, EventArgs e)
{
//string[] result=this.GetFileList();

//if (result.Length > 0)
// foreach (string s in result)
// {
// Response.Write(s + "<br/>");
// }

//this.Download("d:\\", "sp.sql");
this.Upload("d:\\shipfa");
}
}
前台代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="List" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>
源码下载:
/Files/xxpyeippx/WebSite2.rar
在网上搜到了www.knowsky.com/343881.html,这篇文章对于ftp操作做了简单的介绍。
我根据这个介绍,将其转化到网页中来,从而完成我们现在项目的需求。
在这个项目中,我使用了三种方法:List ,upload还是download。
后台代码:











































































































































































































前台代码:
















源码下载:
/Files/xxpyeippx/WebSite2.rar